ホームページ > よくある問題 > なぜinstanceofがインターフェースできるのか

なぜinstanceofがインターフェースできるのか

小老鼠
リリース: 2023-11-13 15:09:57
オリジナル
1000 人が閲覧しました

instanceof はインターフェイスできません。その理由は、instanceof キーワードは、オブジェクトが特定のクラスのインスタンスであるかどうかを確認するために使用され、インターフェイスはインスタンス化できないため、オブジェクトがインターフェイスのインスタンスであるかどうかを確認するために直接使用することはできないためです。

なぜinstanceofがインターフェースできるのか

このチュートリアルのオペレーティング システム: Windows 10 システム、Dell G3 コンピューター。

Java では、instanceof キーワードは、オブジェクトが特定のクラスのインスタンスであるかどうかを確認するために使用されます。インターフェイスはインスタンス化できないため、オブジェクトがインターフェイスのインスタンスであるかどうかを確認するために直接使用することはできません。ただし、オブジェクトがインターフェイスを実装しているかどうかを確認する間接的な方法がいくつかあります。

まず、Java のジェネリックスと型消去について理解する必要があります。 Java では、ジェネリックとはコンパイル時の型チェックに使用されるメカニズムで、変数、パラメータ、戻り値の型などが指定された型に準拠しているかどうかをコンパイル時にチェックできます。型消去は、ランタイム コードがジェネリック型情報を認識しないように、コンパイル時にジェネリック型情報を消去するメカニズムです。

Java では、ジェネリックスと型消去を使用して、List などの任意の型を受け入れることができるコレクションを作成できます。次に、インターフェイスを実装するオブジェクトをコレクションに追加できます。コレクションでは、オブジェクトの実際の型は消去され、インターフェイスを実装しているという情報だけが残ります。

このようにして、実行時にオブジェクトがインターフェイスを実装しているかどうかを確認できます。たとえば、List をパラメータとして受け取り、リストを反復処理して、各オブジェクトが指定されたインターフェイスを実装しているかどうかを確認するメソッドを作成できます。このインターフェイスを実装するオブジェクトが見つかった場合はそのオブジェクトを返すことができ、それ以外の場合は null またはその他のデフォルト値を返すことができます。

以下は、ジェネリックスと型消去を使用して、オブジェクトが特定のインターフェイスを実装しているかどうかを確認する方法を示す簡単なサンプル コードです。

import java.util.List;  
  
public class InstanceOfInterfaceExample {  
    public static <T> T findFirstInstance(List<Object> list, Class<T> interfaceClass) {  
        for (Object obj : list) {  
            if (interfaceClass.isInstance(obj)) {  
                return interfaceClass.cast(obj);  
            }  
        }  
        return null;  
    }  
}
ログイン後にコピー

この例では、findFirstInstance メソッドは A List< を受け入れます。 Object> と Class をパラメータとして使用します。ここで、T は、検出されるインターフェイスのタイプです。このメソッドは、リスト内の各オブジェクトを反復処理し、Class.isInstance() メソッドを使用して、オブジェクトが指定されたインターフェイスのインスタンスであるかどうかを確認します。その場合は、Class.cast() メソッドを使用して、オブジェクトを指定されたインターフェイス タイプのオブジェクトにキャストし、それを返します。一致するオブジェクトが見つからない場合は、null が返されます。

以上がなぜinstanceofがインターフェースできるのかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート