103

私はClassオブジェクトを持っています。Classオブジェクトが表す型が特定のインターフェイスを実装しているかどうかを判断したいと考えています。どうすればこれを達成できるのだろうか?

次のコードがあります。基本的に、指定されたパッケージ内のすべてのクラスの配列を取得します。次に、配列を調べて、インターフェイスを実装する Class オブジェクトをマップに追加します。問題はisInstance()、オブジェクトをパラメーターとして受け取ることです。インターフェイスをインスタンス化できません。だから私はこれでちょっと途方に暮れています。何か案は?

Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
    if(clazz.isInstance(/*Some object*/)) //Need something in this if statement
    {
        retVal.put(clazz.getSimpleName(), clazz);
    }
}
4

5 に答える 5

243

使用する必要がありますisAssignableFrom

if (YourInterface.class.isAssignableFrom(clazz)) {
    ...
}
于 2012-08-27T15:47:51.170 に答える
18

以下の関数を使用して、実装されているすべてのインターフェースを取得できます

Class[] intfs = clazz.getInterfaces();
于 2012-08-27T15:49:01.870 に答える
10

を使用class.getInterfaces()して、インターフェイス クラスがそこにあるかどうかを確認できます。

Class someInterface; // the interface you want to check for 
Class x; // 
Class[] interfaces = x.getInterfaces();

for (Class i : interfaces) {
    if (i.toString().equals(someInterface.toString()) {
        // if this is true, the class implements the interface you're looking for
    }
}
于 2012-08-27T15:51:27.417 に答える
1

「.class」を追加してインスタンスを設定することもできます

Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
    if(Interface.class.isAssignableFrom(clazz))
    {
        retVal.put(clazz.getSimpleName(), clazz);
    }
}
于 2012-08-27T15:50:35.507 に答える