2016-05-24 10 views
3

Javaでは、Classクラスがあり、インスタンス化せずに他のクラスを表すために使用できます。例:Java "Interface"クラス

Class[] foo = { ArrayList.class, String.class, Character.class, Integer.class, MyCustomClass.class }; 
ArrayList bar = foo[0].newInstance(); 

は有効なコードです。例えば、Objectの配列を実行して、instanceofの配列を、潜在的なアプリケーションを持つfoo配列内の対応するクラスにチェックすることもできます。

このようなクラスはJavaのinterfacesには存在しますか? Javaの8のように、インターフェースは今の静的メソッドを持つことができるので、悪い習慣場合、この動作は、有用である可能性

Interface[] foo = {Comparable, List<String>, MyCustomInterface} 

:私はこれに似た何かを行うことができたために、いくつかのクラスがあります。それは存在しますか?

+3

あなたは 'ArrayList.class、String.class'などを意味します、そうですか? –

+4

[*クラスのクラスのインスタンスは、実行中のJavaアプリケーションのクラス**およびインタフェース**を表します。*](https://docs.oracle.com/javase/8/docs/api/java/lang/Class) .html) – Tunaki

答えて

10

インターフェイスは、Class.isInterface()がtrueを返す単なるクラスです。したがって:

Class<?>[] foo = {Comparable.class, List.class, MyCustomInterface.class}; 

たとえば、次のような汎用クラスインスタンスはありません。 List<String>:それはちょうど未加工のList.classです。

+0

OPの動作を得るためにClassを拡張するInterfaceクラスを宣言できるかどうか疑問に思いますか? (可能であれば、それは良い考えではありません。) –

+1

@DanielWiddisは 'Class'が' final'だとしたら、それは不可能です。 –

関連する問題