问题描述
我的项目在切换到 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 (将#修改为@)