当参数由泛型方法返回时,Java11JVM没有选择正确的方法
切换到Java11时,我的项目中出现了一个问题。问题是: 我有一个接口
public interface InterfaceA {}
儿童班
public class ClassA implements InterfaceA {}
通用方法
private final Map<String, InterfaceA> h = new HashMap<>();
public <T extends InterfaceA> T get(String key) {
return (T) h.get(key);
}
现在,当我调用例如StringBuilder append方法时:
StringBuilder sb=new StringBuilder();
sb.append(get("KeyString")); //call StringBuilder.append(CharSequence) method
我在运行时得到一个ClassCastException
Exception in thread "main" java.lang.ClassCastException: class ClassA cannot be cast to class java.lang.CharSequence
当我转换返回值时
sb.append((ClassA)get("KeyString")); //call StringBuilder.append(Object) method
它起作用了
问题是为什么选择错误的jvm方法
StringBuilder.append(CharSequence);
而不是
StringBuilder.append(Object);
我不想实现CharSequence接口。在前面的文章中,它使用Java8。现在我不想在我的代码中强制执行每个调用,因为在整个代码中有1000多个位置
我对HashMap也有同样的问题。放方法
谢谢你的帮助
共 (0) 个答案