java - 为什么我的通用方法停止工作?

标签 java eclipse generics

在我的项目中,我有一个工厂方法可以加载一个实现接口(interface)的对象。你传入你想要的类并接收它的实例化,就像这样。

public class Factory {
    public static <E extends SomeInterface> E load( Class<E> clss ) throws Exception {
        return clss.newInstance();
    }
}

你可以像这样调用它:

MyObject obj = Factory.load( MyObject.class );

此代码在使用 Java 6u13 的 Eclipse 3.4 中工作得很好,但是今天我收到了一台新笔记本电脑并安装了 Eclipse 3.5 和 java 6u15,现在到处都是类型不匹配。

MyObject obj = Factory.load( MyObject.class );
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
               Type mismatch: cannot convert from SomeInterface to MyObject

在那条线上的 Factory 之前放置一个 cast 可以让它消失并且一切运行良好,但它会让这条线变得不那么干净,而且我以前不需要它,那有什么用呢?

最佳答案

您最近是否向您的工厂类添加了类型参数?原始类型的泛型方法有一个缺陷:

  public class FooFactory<UnrelatedArg> {
    public <E> E load(Class<E> c) { ... }
  }

  FooFactory<?> f; f.load(String.class); // returns String
  FooFactory    f; f.load(String.class); // returns Object

关于java - 为什么我的通用方法停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1254911/

相关文章:

java - if 语句在 Java 中无法正确计算 boolean 值?

java - 如何对 Java 中的接口(interface)声明应用更多约束?

c++ - 从字符串输入格式调用 C++ 成员函数

java - eclipse中的ant junit构建错误

class - 在泛型类中使用泛型协议(protocol)

java - 如何在 Freemarker DropWizard 中使用按钮调用方法

java - WEB-INF 中的 spring 资源

java - 读取文本文件: Error - Variable out of type FileWriter

java - 如何在 Java/Eclipse 中使用特殊字符

java - Junit 在法语字符串断言上失败