我想传递Class
作为参数并返回此类的实例。我需要确保该类实现ISomeInterface
。我知道我可以用反射做到这一点:
Object get(Class theClass) {
return theClass.newInstance();
}
我不知道如何确保theClass
实施ISomeInterface
ISomeInterface get(Class<? extends ISomeInterface> theClass) {...}
// errrr... you know what i mean?
我不喜欢生产中的反射,但测试非常少
相关:
答案 0 :(得分:2)
使用isAssignableFrom
。
ISomeInterface get(Class<? extends ISomeInterface> theClass) {
if (ISomeInterface.class.isAssignableFrom(theClass)) {
return theClass.newInstance();
} else { /* throw exception or whatever */ }
}
答案 1 :(得分:1)
答案 2 :(得分: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 */ }
}
}
答案 3 :(得分:0)
您可以使用泛型:
public <T extends ISomeInterface> T get(Class<T> theClass) {
return theClass.newInstance();
}