“未选中的分配”警告
我使用的是 Android Studio 1.1.0。
这不会导致任何警告:
public static class A {
public Map<Integer, String> getMap() {
return null;
}
}
public static class B {
public void processA(A a) {
Map<Integer, String> map = a.getMap();
}
}
但要通用:A
public static class A<T> {
public Map<Integer, String> getMap() {
return null;
}
}
还有这行:
Map<Integer, String> map = a.getMap();
现在收到警告:."Unchecked assignment: 'java.util.Map to java.util.Map<java.lang.Integer, java.lang.String>'
即使 的签名完全独立于 ,并且代码对于所包含的类型是明确的。getMap
T
Map
我知道我可以通过按如下方式重新实现来摆脱警告:processA
public <T> void processA(A<T> a) {
Map<Integer, String> map = a.getMap();
}
但是,我为什么要这样做呢?这里有什么关系呢?T
所以,问题是 - 为什么类型擦除不仅要影响(这是可以理解的 - 如果我传递的实例,是未知的),而且还要像在这种情况下那样“硬编码”通用签名?T
A
T
<Integer, String>