public class Program {
private static <Program> void foo(Program x){
System.out.println(x+"-->1");
}
private static void foo(final int i){
System.out.println(i+"-->2");
}
public static void main(String[] args) {
Integer i = 10;
foo(i);
}
}
,輸出是:Java中的泛型如何適用於以下程序?
10-->1
我沒能找到關於這個主題的相關討論。然而,答案不同的主題弄得我一點: - Return Type of Java Generic Methods
據他們一般<Program>
無關,返回類型,但在我而言,如果我改變一點點這個程序如下則輸出是不同的。
public class Program {
private static <Integer> void foo(Program x){
System.out.println(x+"-->1");
}
private static void foo(final int i){
System.out.println(i+"-->2");
}
public static void main(String[] args) {
Integer i = 10;
foo(i);
}
}
輸出:
10-->2
我使用JDK1.7
在你的第二個例子中,只有第二個版本的'foo()'有一個簽名,它可以匹配你在'main()'中調用的內容。在第一個例子中,在拆箱之前必須有一個優先規則匹配對通用函數的「Integer」調用,並調用替代方法。 –
您正在此行上定義一個新的泛型類型參數'Program':'private static void foo(Program x){'。該類型參數與名爲'Program'的類無關。當您將類型參數的名稱更改爲「整數」時,參數「程序x」突然有一種類型的實際類「程序」。課程:不要將您的類型參數命名爲存在的實際類。 –
marstran
如果您的泛型參數名稱遵循拼寫爲單個大寫字母的約定,那麼您的代碼將更容易遵循。無論如何,當你將它們命名爲具體類型時,它是毫無希望的混淆,更不用說它是一個範圍。從您的類型名稱中分離您的泛型參數名稱! –