2016-04-04 16 views
-3

我有一些泛型類型的問題。我不明白爲什麼在這個代碼 都在呼籲MYTEST點:泛型類型。所有調用都採用相同的方法,我不知道爲什麼

public static <MyData> void myTest(Integer integer) 

在某些情況下,我指定尖括號之間的類型:

tr.<Number>myTest(null); OR tr.<String>myTest(null); 

但我想到的是電話去其他方法。

這是我的課:

public class MyTest { 

    public static void main(String[] arg){ 
     MyTest tr = new MyTest(); 

     tr.<Number>myTest(null); 

     tr.<MyTest>myTest(null); 

     tr.<String>myTest(null); 

    } 

    public static <Number> void myTest(Number number){ 
    } 
    public static <MyData> void myTest(Integer integer){ 
    } 
    public static   void myTest(String string){ 
    } 
    public static <String> void testClass(String string){ 
    } 
} 

提前感謝!

+0

嗯。如果它是模糊的,代碼甚至不應該編譯。 – Thilo

+2

''產生一個稱爲'Number'的類型變量。它不再指'java.lang.Number'。只要刪除''。 (對於其他方法也是如此)。 –

回答

2
public static <Number> void myTest(Number number){ 
} 

這裏,<Number>創建一個名爲Number類型變量 - 你不再提及java.lang.Number。此代碼是語義上等同於書寫:

public static <T> void myTest(T number){ 
} 

所以它基本上是相同的寫作

public static void myTest(Object number){ 
} 

(假設你永遠需要參考Number/T的方法體)。

這樣,所有三個方法的調用

tr.<Number>myTest(null); 
tr.<MyTest>myTest(null); 
tr.<String>myTest(null); 

簡單地調用與不同屬的限制方法相同的方法。

如果你想爲每種類型使用不同的方法,請不要使用泛型。只要定義一個非通用的過載爲每個類型:

void myTest(Number n) { ... } 
void myTest(MyTest n) { ... } 
void myTest(String n) { ... } 

,然後與null的顯式轉換(或特定類型的參考)調用:

myTest((Number) null); 
myTest((MyTest) null); 
myTest((String) null); 
+0

那麼哪個用於?如果我把「數字」,我想說「對象」,如果我把整數,我想說「對象」,等等...我讀了Java文檔,我明白,你可以調用任何方法沒有。我認爲這是不正確的,但所有人都說我的是無用的...... :(我需要清除這個。謝謝。 – Marquake

+0

當你需要限制類型時使用類型變量。例如,一個用例就是你需要的地方兩個(或多個)變量是相同類型的:' void myTest(T paramA,T paramB){}'。另一個是你需要返回類型以匹配參數的地方:' T myTest(T param){另一個是你需要在類型上放置一個邊界的地方:' void myTest(T someNumber)'。另一個是你實際需要引用正文中的類型的地方。 –

+0

好的。這裏我差異的參數: \t'tr.myTest(new String(「A」),new String(「B」)); (new String(「A」),new Integer(「1」)); \t tr.myTest(new String(「A」),null); (新的整數(「1」),新的整數(「1」)); \t 空隙MYTEST(T paramA上,T paramB){ } \t 空隙MYTEST(字符串paramA上,T paramB){ \t} \t 空隙MYTEST(字符串paramA上,字符串paramB){ \t} \t 無效MYTEST(整數paramA上,T paramB){ \t} \t 空隙MYTEST(整數paramA上,整型paramB){ \t}' 然後不是很經常寫'TR 。 '。對? 更頻繁地使用參數的類型來區分調用的方法,對吧? – Marquake

0

嘗試定義一個新的變量,然後用它調用你的方法。例如:

public static void main(String[] arg) { 
    MyTest tr = new MyTest(); 

    Number number = null; 
    tr.<Number>myTest(number); 

    MyTest mTest = null; 
    tr.<MyTest>myTest(mTest); 

    String str = null; 
    tr.<String>myTest(str); 
} 
+0

我剛剛明白「tr」的用法。 「或」tr。「或」tr。「,我沒有任何使用」tr。<>「的示例是有用的。 – Marquake

相關問題