我想从字符串产生一个对象,我也希望那个产生的对象是扩展IObject的IObjectImpl类型。
因此,我有一个采用字符串和接口类的工厂类方法(例如,扩展IObject的IObjectImpl.class,这是强制性的)。该方法应自动检测由字符串(使用反射)类型生成的对象为IObject,并将其强制转换为IObjectImpl。
我已经编写了以下代码进行测试。但是,Intellij不会显示错误,并且在运行main方法的同时,我得到了最后显示的错误。
public <T extends IObject, E extends T> E getInstanceOfType(String clazz, Class type) {
try {
System.out.println("Type got is " + type);
return null;
} catch (Exception exception) {
throw new ObjectInstantiationException(String.format("Could not create the "
+ "instance of type %s", clazz), exception);
}
}
public static void main(String[] args) {
new Factory().getInstanceOfType("Some class", IObjectImpl.class);
}
错误是:
Error:(67, 49) java: ..path\Factory.java:67: incompatible types; inferred type argument(s) com.myCompany.IObject,java.lang.Object do not conform to bounds of type variable(s) T,E
found : <T,E>E
required: java.lang.Object
至于检查类型,我只知道eClass.isAssignableFrom(tClass)方法。
我的最终目标是,我应该能够在没有任何强制转换的情况下调用
IObjectImpl
中定义的方法。如何使用Java 1.6做到这一点? 最佳答案
您可以指定如下类型:(java 6)
public static void main(String[] args) {
new Factory().<IObject, IObjectImpl> getInstanceOfType("Some class", IObjectImpl.class);
}