確認する必要があります:
public static boolean check(Class<?> c, Class<?> d)
{
if (/* c inherits from d */)
return true;
else
return false;
}
どうやってやるの ?
そしてそれはなしで可能c.newInstance()
ですか?
最初にタイトルを間違えました。今は正しいです。
確認する必要があります:
public static boolean check(Class<?> c, Class<?> d)
{
if (/* c inherits from d */)
return true;
else
return false;
}
どうやってやるの ?
そしてそれはなしで可能c.newInstance()
ですか?
使用するisAssignableFrom
if(d.isAssignableFrom(c)){
// then d is a superclass of c
// in other words, c inherits d
}
この Class オブジェクトによって表されるクラスまたはインターフェースが、指定された Class パラメーターによって表されるクラスまたはインターフェースと同じであるか、そのスーパークラスまたはスーパーインターフェースであるかを判断します。その場合は true を返します。それ以外の場合は false を返します。この Class オブジェクトがプリミティブ型を表す場合、指定された Class パラメータがまさにこの Class オブジェクトであれば、このメソッドは true を返します。それ以外の場合は false を返します。
ClassにはClass #isInterface()というメソッドがあります
if (c.isInterface())
return true;
これを試してみてください
if(c.isAssignableFrom(d)){
return true;
} else {
return false;
}
if (c.isInterface()) return true;
isInterface
public boolean isInterface()
指定された Class オブジェクトがインターフェイス型を表しているかどうかを判断します。戻り値: このオブジェクトがインターフェイスを表す場合は true。それ以外の場合は false。sAssignableFrom
public boolean isAssignableFrom(Class<?> cls)
この Class オブジェクトによって表されるクラスまたはインターフェースが、指定された Class パラメーターによって表されるクラスまたはインターフェースと同じであるか、そのスーパークラスまたはスーパーインターフェースであるかを判断します。その場合は true を返します。それ以外の場合は false を返します。この Class オブジェクトがプリミティブ型を表す場合、指定された Class パラメータがまさにこの Class オブジェクトであれば、このメソッドは true を返します。それ以外の場合は false を返します。
具体的には、このメソッドは、指定された Class パラメーターによって表される型を、恒等変換または拡大参照変換によって、この Class オブジェクトによって表される型に変換できるかどうかをテストします。詳細については、Java 言語仕様のセクション 5.1.1 および 5.1.4 を参照してください。
パラメータ: cls - チェックする Class オブジェクト 戻り値: タイプ cls のオブジェクトをこのクラスのオブジェクトに割り当てることができるかどうかを示すブール値 スロー: NullPointerException - 指定された Class パラメータが null の場合。以降: JDK1.1
どうですか
ドキュメントによると:
指定された Class オブジェクトがインターフェイス型を表しているかどうかを判断します。戻り値: このオブジェクトがインターフェイスを表す場合は true。それ以外の場合は false。
試してみましたか
c.isInterface()???
ドキュメントから
指定された Class オブジェクトがインターフェイス型を表しているかどうかを判断します。