Intellij给出了一个奇怪的错误。Java泛型问题

Intellij给出了一个奇怪的错误。Java泛型问题,java,generics,intellij-idea,Java,Generics,Intellij Idea,我希望从字符串生成一个对象,我还希望生成的对象的类型为IObjectImpl,它扩展了IObject 因此,我有一个工厂类方法,它接受一个字符串和一个接口类(比如扩展IOObject的IObjectImpl.class,这是必需的)。该方法应该自动检测字符串(使用反射)类型生成的对象是IOObject,并将其强制转换为IObjectImpl 我已经为测试编写了以下代码。但是,Intellij不显示错误,同时,当我运行main方法时,我得到了最后显示的错误 public <T extends

我希望从字符串生成一个对象,我还希望生成的对象的类型为IObjectImpl,它扩展了IObject

因此,我有一个工厂类方法,它接受一个字符串和一个接口类(比如扩展IOObject的IObjectImpl.class,这是必需的)。该方法应该自动检测字符串(使用反射)类型生成的对象是IOObject,并将其强制转换为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);
}
public E getInstanceOfType(字符串类别,类类型){
试一试{
System.out.println(“得到的类型是”+Type);
返回null;
}捕获(异常){
抛出新的ObjectInstanceException(String.format)(“无法创建”
+“类型%s的实例”,clazz),异常);
}
}
公共静态void main(字符串[]args){
新工厂().getInstanceOfType(“某个类”,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
Error:(67,49)java:…path\Factory.java:67:不兼容类型;推断的类型参数com.myCompany.IObject、java.lang.Object不符合类型变量T、E的边界
发现:E
必需:java.lang.Object
至于检查类型,我只知道eClass.isAssignableFrom(tClass)方法


我的最终目标是,我应该能够调用
IObjectImpl
中定义的方法,而无需任何强制转换。如何使用Java 1.6实现这一点?

您可以指定如下类型:(Java 6)

publicstaticvoidmain(字符串[]args){
新工厂().getInstanceOfType(“某个类”,IObjectImpl.class);
}
公共类工厂{
公共E getInstanceOfType(字符串类别,类类型){
试一试{
System.out.println(“得到的类型是”+Type);
返回null;
}捕获(异常){
抛出新的RuntimeException(String.format)(“无法创建”
+“类型%s的实例”,clazz),异常);
}
}
公共静态void main(字符串[]args){
新工厂().getInstanceOfType(“某个类”,IObjectImpl.class);
}
}

也许这会有所帮助:也许您忘记了
类上的泛型绑定
?也许你得到了关于原始类型的警告?它以一种独立的方式工作。我可以用spring把同一个工厂连接起来,然后去别的地方吗?谢谢。通过提供类上的泛型,就没有问题了。我想春天也可以连线。一份在你之前6分钟贴出的回答很好:)不用担心。有关未来-请参阅本页顶部。如果显示“此问题的新答案已发布”,请在发布自己的答案之前单击刷新。这将有助于避免重复:)
public static void main(String[] args) {
    new Factory().<IObject, IObjectImpl> getInstanceOfType("Some class", IObjectImpl.class);
}
public class Factory {
    public <T extends IObject, E extends T> E getInstanceOfType(String clazz, Class<E> type) {
        try {
            System.out.println("Type got is " + type);
            return null;
        } catch (Exception exception) {
            throw new RuntimeException(String.format("Could not create the "
                    + "instance of type %s", clazz), exception);
        }
    }

    public static void main(String[] args) {
        new Factory().<IObject, IObjectImpl>getInstanceOfType("Some class", IObjectImpl.class);
    }
}