gpt4 book ai didi

当涉及泛型时,Java 8 选择与 Java 7 不同的重载方法

转载 作者:搜寻专家 更新时间:2023-10-30 21:13:06 28 4
gpt4 key购买 nike

<分区>

我有以下测试类:

import java.io.Serializable;
public class Java8Problem {

public void test(String stringArg) {
System.out.println("string-Method taken: " + stringArg);
}

public void test(Object objectArg) {
System.out.println("object-Method taken: " + objectArg.toString());
}

public <T extends Serializable> T getTestData() {
return (T) new Integer(10);
}

public static void main(String[] arguments) {
Java8Problem instance = new Java8Problem();
instance.test(instance.getTestData());
}

}

当我在 Java 7 中编译并运行此类时,输出将是:

object-Method taken: 10

但是当我在 Java 8 中编译和运行这个类时,我得到一个运行时异常:

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at Java8Problem.main(Java8Problem.java:21)

所以 Java 8 似乎采用了最具体的方法,而 Java 7 采用了最常见的方法。

有人知道这是 Java 8 中的错误还是它已更改/期望的行为?如果是后者,是否有可能将 Java 8 配置为使用旧行为?还是有其他方法可以解决?

顺便说一句:我知道这里的问题是由方法 getTestData 的返回类型引起的,但这只是我无法轻易更改该方法的签名的现实世界问题的简化示例。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com