java - 为什么在使用通配符参数化类型的泛型类型时必须添加显式转换?
问题描述
这是代码:
public class Pair<X,Y> {
private X first;
private Y second;
public Pair(X x, Y y) {
first = x;
second = y;
}
public X getFirst() { return first; }
public Y getSecond() { return second; }
public void setFirst(X x) { first = x; }
public void setSecond(Y y) { second = y; }
}
final class Test {
public static void main(String[] args) {
String a = "a";
Pair<?,?> pair = new Pair<String,Long>("limit", 10000L);
String s = pair.getFirst();
}
这段代码不行,因为方法返回的对象getFirst()
不能转成字符串:</p>
Test.java:5: error: incompatible types: CAP#1 cannot be converted to String
String s = pair.getFirst();
^
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
1 error
似乎编译器添加了隐式转换但失败了。
但是当我添加一个显式的 cast( String s = (String)pair.getFirst()
) 时,它就起作用了。
为什么会这样???
解决方案
推荐阅读
- sql - netezza 系统表/视图的 $v_hist_queries 和 $hist_plan_prolog_n 中存储的信息有什么区别
- swift - Swift 编译器错误:枚举案例有一个元组作为关联值,但这里有几种模式
- swift - Swift 字典追加或插入
- eclipse - MQTT 的数据包传送率比 CoAP 高多少?
- sql - 按地区名称(另一组)每组每种族的百分比
- java - 我想重复这个问题,但如果用户输入 -1 我希望程序停止?
- html - 我收到此错误:措辞错误:保留关键字“const”
- android - 为什么材质 FAB 在禁用时不改变颜色?
- javascript - 检查数组中的项目,如果在 JS/HTML 中有打印特定文本
- sql - 数据存在时内连接返回空集