Java方法调用,可以设定参数下面的代码:什么时候参数化方法调用有用?
class Test
{
<T> void test()
{
}
public static void main(String[] args)
{
new Test().<Object>test();
// ^^^^^^^^
}
}
我发现这是可能从Eclipse的Java格式化设置对话框,并想知道是否有任何情况下,这是有用的或必需的。
编辑
基于阿恩的出色答卷,我想出了以下结论:
除了改善型安全性阿恩的例子说明了一个参数化方法调用,您可以指定的应该是容器元素类型的方法参数的公共基类型。这种类型通常由编译器自动推断为最具体的通用基本类型。通过参数化方法调用,该行为可能被覆盖。如果编译器推导出多个通用类型,则可能需要参数化方法调用。
下面的示例演示该行为:
import java.util.Arrays;
import java.util.List;
class Test
{
public static void main(String[] args)
{
Integer a=new Integer(0);
Long b=new Long(0);
List<Object> listError=Arrays.asList(a, b);
//error because Number&Comparable<?> is not Object
List<Object> listObj=Arrays.<Object>asList(a, b);
List<Number> listNum=Arrays.<Number>asList(a, b);
List<Comparable<?>> listCmp=Arrays.<Comparable<?>>asList(a, b);
}
}
这种行为是在Java语言规范第三版第8.4.4和15.12.2.7定义,但不容易理解。
难道只有我认为这很奇怪吗?这个线程中的每个人似乎都认为“参数化方法”必须是一个通用方法?具有声明参数的方法是“参数化”方法。泛型方法只是另一种参数化方法,其中类型就是这样一个参数。或者我错过了什么? – 2017-09-22 13:24:49
你是在现场!事后看来,标题应该是“什么时候调用类型参数的方法调用不可能推断有用?” – 2017-09-23 16:51:02