Reflection - 将接口实现为参数的类

时间:2013-10-21 08:13:53

标签: java reflection

我想传递Class作为参数并返回此类的实例。我需要确保该类实现ISomeInterface。我知道我可以用反射做到这一点:

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

我不知道如何确保theClass实施ISomeInterface

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

我不喜欢生产中的反射,但测试非常少

相关:

4 个答案:

答案 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();
}