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