我在项目中创建了一个工厂类,从理论上讲,该类允许我为任何(受支持的)给定类型创建管理器。与管理器进行交互使我可以更改给定类型的某些属性。我面临的问题是,当我尝试为泛型类型创建管理器时,编译器粉碎了我的希望和梦想。
以下代码是我正在使用的简化版本。我尝试创建“
test3Manager”的行将不会编译,并且我试图了解为什么会这样。它下面的线显示了一种“解决方法”,我正试图避免这种情况。
import java.util.List;
public class GenTest {
public static void main(String[] args) {
String test1 = "";
IRandomType test2 = null;
IAnotherRandomType> test3 = null;
IManager test1Manager = Factory.createManager(test1);
IManager> test2Manager = Factory.createManager(test2);
IManager> test3Manager = Factory.createManager(test3); // Doesn't compile. Why?
// Work around?
IManager> test3ManagerTmp = Factory.createManager(test3);
IManager> test3Manager2 = (IManager>) test3ManagerTmp;
}
public interface IRandomType {}
public interface IAnotherRandomType {}
public interface IManager {}
public static class Factory {
public static IManager createManager(T object) {
return null;
}
}
}
确切的编译错误消息是:
Type mismatch: cannot convert from GenTest.IManager> to GenTest.IManager>
之前已经问过类似的问题(见下文);但是,我不知道这个问题是否被认为是它们的重复。我仅说明这一点,因为我无法从这些问题中得出答案。我希望有人可以澄清我对泛型的使用做错了什么。