转换错误

问题描述:

的一个错误如下因素miminal例如resuts在Android工作室“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)应该是有效的,并为我多次工作。所以转换不应该是问题,并且错误根本没有帮助。

花了我好几个小时来创建一个最小的exmaple(我的原始项目更复杂,涉及Android特定的代码)。当我将最小的例子复制到eclipse中时,我发现我忘记了在MyFactoryextend Factory<MyFactory>之间添加模板参数。 Eclipse给了我一个警告来扩展原始类型。原始类型不提供成员函数empty()的一般参数,并返回Collection而不是T extends Collection

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

我希望这可以帮助遇到同样问题的人。