【发布时间】:2015-01-18 21:12:11
【问题描述】:
假设我们有如下两种方法:
public static <T> T genericReturn() { /*...*/ }
public static String stringReturn() { /*...*/ }
在调用任何方法时,无论是否有任何要求,都可以提供类型见证:
String s;
s = Internet.<String>genericReturn(); //Type witness used in return type, returns String
s = Internet.<Integer>stringReturn(); //Type witness ignored, returns String
但是,我在 Java 中根本没有看到任何实际用途,除非无法推断类型(这通常表明存在更大的问题)。此外,当使用不当时,它会被简单地忽略,这一事实似乎违反直觉。那么在 Java 中使用这个有什么意义呢?
【问题讨论】:
-
我很惊讶你的第一个 sn-p 甚至编译,因为
get()不是通用方法。需要进一步研究一下。你在哪里见过这样的代码?也许这是一个奇怪的反编译器的结果? -
虽然类型参数无关紧要 -
ExampleSuper sup = dataList.<String>get(0);也可以编译。 -
@JonSkeet
get的返回类型是泛型的,它受类自己定义的泛型修饰符<E>的限制 -
但这并不能使 方法 通用。方法本身没有类型参数;类型参数在 class 上。为没有类型参数的方法指定类型参数对我来说毫无意义。
-
@JonSkeet 经过一些测试,您似乎可以在任何方法调用中添加“参数化”,只要转换是合法的(向上转换)。