小编Joh*_*cob的帖子

参数化方法调用何时有用?

Java方法调用可以参数化,如下面的代码所示:

class Test
{
    <T> void test()
    {
    }

    public static void main(String[] args)
    {
        new Test().<Object>test();
        //         ^^^^^^^^
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这可以从Eclipse Java Formatter设置对话框中找到,并且想知道是否存在任何有用或必需的情况.


编辑

根据Arne的优秀答案,我得出以下结论:

除了改进类型安全性之外,Arne的示例说明了参数化方法调用使您能够指定应该是容器元素类型的方法参数的公共基本类型.此类型通常由编译器自动推断为最具体的公共基类型.通过参数化方法调用,可以覆盖此行为.如果编译器推断出多种常见类型,则可能需要参数化方法调用.

以下示例演示了该行为:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

此行为在Java语言规范第三版第8.4.4和15.12.2.7段中定义,但不容易理解.

java generics parameters methods call

16
推荐指数
3
解决办法
2万
查看次数

标签 统计

call ×1

generics ×1

java ×1

methods ×1

parameters ×1