12

私はこれを聞いてみたいだけです、多分それは全く無意味です.

次のように、Java で instanceof を使用している場合:

if (a instanceof Parent){ //"Parent" here is a parent class of "a"
}

以下のように使用できない理由:

if (a instanceof Parent.class){
}

2 番目の「instanceof」は、厳密なプログラミングの観点からより理にかなっていますか? 「Parent」と「Parent.class」の違いは何ですか?

4

6 に答える 6

19

「Parent」と「Parent.class」の違いは何ですか?

後者はクラス リテラルです。つまり、 type のオブジェクトにアクセスする方法ですClass<Parent>

前者は単なるクラスの名前であり、静的メソッド、コンストラクター、キャストなどを呼び出すときなど、さまざまな状況で使用されます。

2 番目の「instanceof」は、厳密なプログラミングの観点からより理にかなっていますか?

言語が定義されているわけではありません-型の名前でinstanceof のみ機能し、式では機能しません。あなたが書くことができれば

if (a instanceof Parent.class)

次に、あなたが書くことができると思います:

Class<?> clazz = Parent.class;
if (a instanceof clazz)

...そして、それはそれが機能する方法ではありません。一方、必要に応じて呼び出すことClass.isInstanceできるメソッドがあります。

そもそも「厳密なプログラミングの見方」とはどういう意味ですか?

于 2012-12-14T06:47:42.060 に答える
1

Parentはクラスなので、2 番目の例は最初の例ほど意味がありません。インスタンスがクラスのインスタンスであるかどうかを尋ねていますが、それa instanceof Parentはかなり直接的な表現です。

Parent.classは のインスタンスClassあるため、2 番目の例がコンパイルされたとしても (そうではなく、 の右側instanceof自体がインスタンスになることはできません)、チェックしたいものをチェックしません。:-)

于 2012-12-14T06:47:22.933 に答える
0

Parent型の名前です。 Parent.class基本的に、オブジェクト (具体的には のインスタンスClass) を参照する静的変数です。それ自体が他の型のインスタンスであるオブジェクトのインスタンスであるかどうかではなく、型aのインスタンスであるかどうかを尋ねます (名前付き)。ParentClass

于 2012-12-14T06:47:35.463 に答える
0

あなたが書くとき、それはあなたの親クラスParent.classのオブジェクトを作成していることを意味します。java.lang.Classしたがってif (a instanceof Parent.class){ }、これはうまくいきません。

Classクラスの詳細については、次のリンクを参照してください。

クラス Class のインスタンスは、実行中の Java アプリケーションのクラスとインターフェースを表します。すべての配列は、要素の型と次元数が同じすべての配列によって共有される Class オブジェクトとして反映されるクラスにも属します。プリミティブ Java 型 (boolean、byte、char、short、int、long、float、および double)、およびキーワード void も Class オブジェクトとして表されます。

于 2012-12-14T06:47:47.977 に答える
0

staticParent.classメンバーは実際にはオブジェクトです。必要に応じて、タイプObjectまたはタイプの変数に割り当てることができます。Class

Object o = Parent.class;
Class c = Parent.class;

Parent一方、オブジェクトや変数ではありません。Java 仕様によると、これはType Nameです。

これができたら...

a instanceof Parent.class

Parent.classオブジェクトであるため、これを実行することもできます。

Cat myCat = new DomesticLonghair();
a instanceof myCat;

...これはばかげています。

于 2012-12-14T06:48:30.930 に答える