使用 Class<T> 的派生工厂转换错误

Conversion error on derivated Factory using Class<T>

以下最小示例在 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<T> clazz) 应该是有效的并且对我有用很多次。所以转换应该不是问题,错误根本没有帮助。

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

的通用参数

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

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