gpt4 book ai didi

java - 如何让 Java 编译器告诉我它推断出什么类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:31 27 4
gpt4 key购买 nike

当我有一个 Java 泛型函数时:

<T> T choose(T a, T b) { }

我从某个地方调用它,我怎样才能找出为 T 推断出的类型?

编辑:类型推断发生在编译时。所以我要问的是,如何让编译器告诉我它在编译期间拥有的一些信息(推断类型),但这些信息没有进入 .class 文件?

我可以做的一件事是尝试将结果分配给各种类型的变量,例如:

// Compiles, so inferred type is at least Throwable.
Throwable foo = choose(new EOFException(), new FileNotFoundException());

// If this compiles, T must be Map or something that implements Map.
Map foo = choose(new HashMap(), new TreeMap());

但这是相当间接的。我希望编译器告诉我它为 T 推断出什么类型,而不是让我必须回答 20 个问题。

最佳答案

在eclipse 中,将鼠标悬停在方法调用表达式上。 Eclipse 将使用推断的类型显示签名。

编辑:看来这并不总是正确的。对于以下声明

interface I {void foo();}
class C {}
class D extends C implements I { public void foo() {}}
class E extends C implements I { public void foo() {}}

和表达式,

java.util.Arrays.asList(new D(), new E()).get(0).foo();

显示的推断类型是 ? extends C,但实际推断出的类型是?扩展 C & I,如允许访问 foo 所示。我不知道为什么 eclipse 显示的类型与其内置编译器推断的类型不同......

关于java - 如何让 Java 编译器告诉我它推断出什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1852107/

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