如何解决当参数由泛型方法返回时,java 11 jvm 没有选择正确的方法
我的项目在切换到 Java 11 时遇到了问题。问题是: 我有一个界面
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 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 接口。早期它适用于 java 8。现在我不想在我的代码中强制转换每个调用,因为整个代码中有 1000 多个位置。
HashMap.put 方法也有同样的问题。
感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。