18

確認する必要があります:

public static boolean check(Class<?> c, Class<?> d)
{
    if (/* c inherits from d */)
        return true;
    else
        return false;
}

どうやってやるの ?

そしてそれはなしで可能c.newInstance()ですか?


最初にタイトルを間違えました。今は正しいです。

4

6 に答える 6

34

使用する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 を返します。

ソース

于 2013-04-25T08:53:44.163 に答える
3

ClassにはClass #isInterface()というメソッドがあります

 if (c.isInterface())
            return true;
于 2013-04-25T08:52:11.600 に答える
2

これを試してみてください

if(c.isAssignableFrom(d)){
   return true;
} else {
   return false;
}
于 2013-04-25T08:54:31.073 に答える
1
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

于 2013-04-25T08:54:33.763 に答える
1

どうですか

public boolean isInterface();

ドキュメントによると:

指定された Class オブジェクトがインターフェイス型を表しているかどうかを判断します。戻り値: このオブジェクトがインターフェイスを表す場合は true。それ以外の場合は false。

于 2013-04-25T08:52:03.867 に答える
0

試してみましたか

c.isInterface()???

ドキュメントから

指定された Class オブジェクトがインターフェイス型を表しているかどうかを判断します。

于 2013-04-25T08:52:38.303 に答える