我在我的项目中创建了一个工厂类,它允许我(理论上)为任何(支持的)给定类型创建管理器.与管理器交互允许我改变给定类型的某些属性.我面临的问题是当我尝试为泛型类型创建一个管理器时,编译器会破坏我的希望和梦想.
以下代码是我正在使用的精简版本.我尝试创建’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>
之前已经提出了类似的问题(见下文);但是,我不知道这个问题是否与他们重复.我只是陈述这一点,因为我无法从这些问题中推断出我的答案.我希望有人可以澄清我使用仿制药时我做错了什么.
关于SO的相关问题是: