首頁 >Java >這在 Java 泛型中怎麼可能呢?

這在 Java 泛型中怎麼可能呢?

王林
王林轉載
2024-02-08 23:20:09964瀏覽

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是什麼?

誰能解釋一下嗎?

解決方法

主要結果是IntegerString都是從Serialized實現的。

所以你的程式碼等於:

public static <T extends Serializable> void inspect(T a, T b) {
    System.out.println(a + "_" + b);
}

如果變更為blow程式碼,則僅在IntegerNumber子類別中有效。

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除