1

我想传递一个Class作为参数并返回这个类的一个实例。我需要确保该类实现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

看看这里Class.isAssignableFrom(java.lang.Class c)

于 2013-10-21T08:16:53.223 回答
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 回答