微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当参数由泛型方法返回时,java 11 jvm 没有选择正确的方法

如何解决当参数由泛型方法返回时,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 追加方法时:

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 举报,一经查实,本站将立刻删除。