0

クラス ファイルへのパスが与えられた場合、それが特定のインターフェイスを実装しているかどうかを確認するにはどうすればよいですか?

javap を使用して出力を解析することもできますが、おそらくもっと賢い方法があります。

ソースコードが利用できない可能性があるため、ソースコードを解析したくありません。また、クラス ファイルのパスは実行時にのみ使用できることにも注意してください。

4

2 に答える 2

0

コマンドラインから確認する必要がある場合は、javap がオプションです。

コード内からチェックする必要がある場合、これは機能するはずです

interface MyInterface {
    ...
}
try {
    URL classUrl;
    classUrl = new URL(<path to the dir containg the .class file>); 

    URL[] classUrls = { classUrl };
    URLClassLoader ucl = new URLClassLoader(classUrls);

    Class clazz = ucl.loadClass(<your class name>); 
    if (MyInterface.class.isInstance(clazz.newInstance())){
        ...
    }
}
catch (Exception e){ System.out.println(e);}
于 2015-11-18T08:57:42.533 に答える
-1

クラス A がインターフェイス B を実装しているとします。

InstanceOf 演算子を使用できることを確認するには

A a = new A();
if(a instanceof B)  // here a is refernce variable holding object of class A
{
//do your thing
}

編集

Class clazz = (Class) Class.forName("Your class name");
for (Class c : clazz.getClass().getInterfaces()) {
   String name=c.getName());
   if(name.equals("org.apache.SomethingInterface"))
    {
     now u know u have it implemented
    }
}
于 2015-11-18T07:57:59.093 に答える