如何让Java编译器告诉我它推断的类型?

当我有一个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();

显示的推断类型是?扩展C,但实际推断的类型是?扩展C&我(从对foo的允许访问中可以看出).我不知道为什么eclipse显示的类型与其内置编译器推断的类型不同…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值