php小編蘋果為您解答:在Java泛型中,"這在 Java 泛型中怎麼可能呢?"這樣的問題其實是有可能的。因為Java泛型允許使用萬用字元來表示不確定的類型,例如使用 "?" 表示任意型別。當我們在定義泛型方法或泛型類別時,可以使用通配符來限定參數類型或傳回值類型,從而實現一些特定的功能。雖然在某些情況下,可能會因為類型擦除而導致一些限制,但透過合理的設計和使用,我們可以在Java泛型中實現許多看似不可能的操作。
我剛剛注意到,當談到 Java 泛型時,一些對我來說非常違反直覺的事情。我們來看看這個方法:
public static <T> void inspect(T a, T b) { // ... }
可以進行以下呼叫:
inspect(new Integer(3), new String("What? How?"))
我認為一旦類型T被推導出來,它就必須是一致的,就像兩個字串或兩個整數一樣。 這沒有多大意義,因為如果我的方法中有以下行:
T tmp
T是什麼?
誰能解釋一下嗎?
主要結果是Integer
和String
都是從Serialized
實現的。
所以你的程式碼等於:
public static <T extends Serializable> void inspect(T a, T b) { System.out.println(a + "_" + b); }
如果變更為blow程式碼,則僅在Integer
或Number
子類別中有效。
public static <T extends Number> void inspect(T a, T b) { System.out.println(a + "_" + b); }
這是一個更好的例子:
public class MyTest { @Test public void demo() { inspect(new FirstSon("a"), new SecondSon("b")); } public <T> void inspect(T a, T b) { System.out.println(a + "_" + b); } interface Parent { } static class FirstSon implements Parent { private String name; public FirstSon(String name) { this.name = name; } } static class SecondSon implements Parent { private String name; public SecondSon(String name) { this.name = name; } } }
以上是這在 Java 泛型中怎麼可能呢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!