作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我有一个 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/
我是一名优秀的程序员,十分优秀!