【问题标题】:Conversion error on derivated Factory using Class<T>使用 Class<T> 的派生工厂上的转换错误
【发布时间】:2017-07-07 19:11:12
【问题描述】:

以下最小示例在 Android Studio 上导致错误“Collection 无法转换为 LinkedList”:

class Factory<F extends Factory<F>> {

   public <T extends Collection<?>> T empty(Class<T> clazz) {
       try {
           return clazz.newInstance();
       } catch (Exception e) {
           throw new Error(e);
       }
   }

}

class MyFactory extends Factory {

   // ERROR is displayed here
   LinkedList<?> list = empty(LinkedList.class);  

}

我试图消除该错误,但无法找出问题所在。构造 T create(Class&lt;T&gt; clazz) 应该是有效的并且为我工作了很多次。所以转换不应该是问题,错误根本没有帮助。

【问题讨论】:

    标签: java android-studio generics factory


    【解决方案1】:

    我花了几个小时来创建一个最小的示例(我的原始项目更复杂,并且涉及 Android 特定代码)。当我将最小示例复制到 Eclipse 时,我意识到我忘记将 MyFactory 上的模板参数添加到 extend Factory&lt;MyFactory&gt;。 Eclipse 给了我一个扩展原始类型的警告。该原始类型不提供成员函数empty() 的通用参数,并返回Collection 而不是T extends Collection

    Android Studio 实际上可以在原始类型上创建警告,但默认情况下它是禁用的。请参阅this thread 了解如何启用它。

    我希望这对遇到同样问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      相关资源
      最近更新 更多