有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当参数由泛型方法返回时,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) 个答案