เมนู

Java 変数の型を instanceof で確認する

สารบัญ

ตรวจสอบประเภทของตัวแปร

โปรแกรมตัวอย่างนี้แสดงวิธีการตรวจสอบชนิดของตัวแปรในภาษา Java

Java เป็นภาษาที่มีการกำหนดประเภทข้อมูลแบบคงที่ โดยมีการประกาศประเภทข้อมูลอย่างชัดเจน ดังนั้นจึงไม่ค่อยมีโอกาสมากนักที่จะต้องตรวจสอบประเภทข้อมูล อย่างไรก็ตาม เมื่อใช้ตัวแปรที่สืบทอดมา การตรวจสอบประเภทข้อมูลอาจมีความจำเป็น

วิธีการตรวจสอบชนิดข้อมูลในภาษา Java instanceof คุณสามารถใช้ตัวดำเนินการเพื่อประเมินคลาสและอินเทอร์เฟซโดยใช้คำสั่ง if ได้ดังนี้:

ตัวแปร instanceof クラス

ตัวแปร instanceof インターフェース

instanceof คุณสามารถระบุชื่อคลาสหรือชื่ออินเทอร์เฟซได้ทางด้านขวามือinstanceof ค่าที่ส่งกลับเป็นค่าบูลีน และถ้าเป็นจริง ตัวแปรนั้นจะเป็นคลาสหรืออินเทอร์เฟซที่ระบุไว้

แชทและส่งข้อความ นี่คือซอฟต์แวร์กลุ่มงานที่ใช้งานง่ายและครบวงจร ซึ่งรวมฟังก์ชันต่างๆ ไว้ด้วยกัน เช่น การแชททางธุรกิจ การประชุมผ่านเว็บ การแชร์ไฟล์ การจัดการตารางเวลา การจัดการเอกสาร การจองห้องประชุม และการจัดการการเข้างาน นอกจากนี้ยังมอบระบบรักษาความปลอดภัยที่แข็งแกร่งสำหรับธุรกิจอีกด้วยใช้งานได้ฟรี!

ตัวอย่างโปรแกรม

มาเริ่มจากรูปแบบที่ง่ายที่สุดก่อน ถ้าตัวแปร i เป็นจำนวนเต็ม จะส่งคืนค่า true มิเช่นนั้นจะส่งคืนค่า false

ตัวอย่างโค้ด

public static void integerSample() {
    Integer i = 100;
    boolean result = i instanceof Integer;
    System.out.println(result);
}

ผลลัพธ์ที่ได้

true

変数 i は Integer なので、結果は true になります。しかし、これでは当たり前すぎて instanceof がなんのためにあるか分かないので、もう少し複雑にします。

instanceof の効果的な使い方

instanceof の効果的な使い方の一つに、その変数がどの子クラスなのかを判定する場合があります。

ตัวอย่างโค้ด

โค้ดตัวอย่างนี้สร้างคลาสสัตว์ชื่อ Animal และอีกสองคลาสคือ Dog และ Cat ซึ่งสืบทอดมาจากคลาส Animal หลังจากสร้างอินสแตนซ์แล้ว จะใช้เมธอด `play` เพื่อกำหนดค่าตัวแปร instanceof ระบบจะตรวจสอบสิ่งนี้และแยกเอาต์พุตไปยังคอนโซลตามนั้น

class Animal {} 
class Dog extends Animal {}
class Cat extends Animal {}

public class Main {
    public static void main(String[] args) {
        instanceofSample();
    }
    
    static void instanceofSample() {
        Animal dog = new Dog();
        play(dog);
        Animal cat = new Cat();
        play(cat);
    }
    
    static void play(Animal animal) {
        if (animal instanceof Dog) {
            System.out.println("お散歩する");
        } else {
            System.out.println("猫じゃらしで遊ぶ");
        }
    }
}

ผลลัพธ์ที่ได้

お散歩する
猫じゃらしで遊ぶ

ประเด็นสำคัญคือ ภายในเมธอด `play` นั้น เป็นไปไม่ได้ที่จะรู้ว่า `animal` ที่ส่งมาเป็นอาร์กิวเมนต์นั้นเป็นสุนัขหรือแมว

instanceof ดังนั้น เนื่องจากเราสามารถตรวจสอบอินสแตนซ์ของคลาสย่อย (เช่น สุนัข หรือ แมว) ที่อยู่ในคลาสหลัก (เช่น สัตว์) ได้ เราจึงสามารถใช้งานในลักษณะนี้ได้เช่นกัน

ตรวจสอบว่ามีการใช้งานอินเทอร์เฟซที่ระบุหรือไม่

instanceof の対象となる変数に、ある特定のインターフェースが実装されているか確認できます。例えばこのような使い方ができます。

ตัวอย่างโค้ด

次のサンプルコードでは、佐藤さん、鈴木さんクラスを作成し、鈴木さんだけが車を持っている想定で、インターフェース Car を implements しています。goShopping() メソッドは買い物に行く処理を仮定していますが、Car を implements しているか、instanceof で判定してコンソール出力を分岐しています。

interface Car {}
class Sato {}
class Suzuki implements Car {}

public class Main {
    public static void main(String[] args) throws Exception {
        instanceofSample();
    }
    
    static void instanceofSample() {
        Sato sato = new Sato();
        goShopping(sato);

        Suzuki suzuki = new Suzuki();
        goShopping(suzuki);
    }
    
    static void goShopping(Object human) {
        if (human instanceof Car) {
            System.out.println("車で行く");
        } else {
            System.out.println("歩いて行く");
        }
    }
}

ผลลัพธ์ที่ได้:

歩いて行く
車で行く

คุณจะเห็นว่ากระบวนการทำงานจะแตกต่างกันไป ขึ้นอยู่กับว่ามีการใช้งานฟังก์ชัน Car หรือไม่

  • URL をkoピーしました!
สารบัญ