1

Classas パラメータを渡し、このクラスのインスタンスを返したいと考えています。クラスが を実装していることを確認する必要がありますISomeInterface。私は反射でそれを行うことができることを知っています:

Object get(Class theClass) {
    return theClass.newInstance();
}

私が知らないのは、theClass実装を確実にする方法ですISomeInterface

ISomeInterface get(Class<? extends ISomeInterface> theClass) {...}
// errrr... you know what i mean?

本番環境でのリフレクションは好きではありませんが、テストには非常に少数です

関連している:

4

4 に答える 4

2

を使用しisAssignableFromます。

ISomeInterface get(Class<? extends ISomeInterface> theClass) {
    if (ISomeInterface.class.isAssignableFrom(theClass)) {
        return theClass.newInstance();
    } else { /* throw exception or whatever */ }
}
于 2013-10-21T08:17:25.023 に答える
1

指定されたクラス オブジェクトがインターフェイスでないかどうかを明示的に確認する必要があります。isAssignableFrom() は、両方のインターフェースのクラス オブジェクトを持っていても true を返します。同じ階層にあるため、true を返します。

次のコードを試すことをお勧めします

ISomeInterface get(Class<? extends ISomeInterface> theClass) {
if(!clazz.isInterface()){
    if (ISomeInterface.class.isAssignableFrom(theClass)) {
        return theClass.newInstance();
    } else { /* throw exception or whatever */ }
}
}
于 2013-10-21T08:34:46.487 に答える
0

ジェネリックを使用できます:

public <T extends ISomeInterface> T get(Class<T> theClass) {
   return theClass.newInstance();
}
于 2016-02-13T20:29:43.873 に答える