我想从字符串产生一个对象,我也希望那个产生的对象是扩展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);
}

10-08 15:02