我遇到了这个奇怪的问题。
class Foo<R, C> {
public C fooMethod() {
Bar bar = new Bar();
Map<String, String> m = new HashMap<>();
return bar.barMethod(m);
}
}
class Bar {
public <T> T barMethod(Map<String, String> m) {
Object barObj = null;
...
return (T) barObj;
}
}
如果我将
m
声明为原始类型Map m = new Map()
,我会得到一个编译错误:
但是如果不兼容的类型:无法将Object转换为C,其中C是一个类型变量。
m
作为声明的类型化对象,则编译错误消失了。我无法理解为什么参数会对编译器确定返回类型产生影响。对于Bar类示例中的通用类型T,编译器在任何情况下都不应认为它是Object类型。有人能指出我错在哪里吗?谢谢。
return bar.<C>barMethod(m);
显式地将 T 设置为 C,问题仍然存在。 - Marco