参数化方法调用何时有用?
2022-09-02 08:57:18
Java 方法调用可以参数化,如以下代码所示:
class Test
{
<T> void test()
{
}
public static void main(String[] args)
{
new Test().<Object>test();
// ^^^^^^^^
}
}
我从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);
}
}
此行为在 Java 语言规范第三版第 8.4.4 和 15.12.2.7 段中定义,但不容易理解。