簡體   English   中英

是否可以有一個擴展其他 2 個類型參數的類型參數?

[英]Is it possible to have a Type Parameter that extends 2 other type parameters?

這是我的目標:我想要一個需要同時為兩種不同類型的參數。

這里的目標是僅使用泛型(無強制轉換或instanceof )從單個對象中提取兩種不同的類型。

我的想法是有第三個類型參數來extends其他兩個。

class DualType<A, B> {
    A a;
    B b;
    <T extends A & B> DualType(T obj) {
         a = obj;
         b = obj;
    }
}

這不起作用。 由於 java 不支持多重繼承,並且編譯器無法保證 B 不是另一個類,所以我們得到一個錯誤。

我的問題是:有沒有辦法定義一個類型參數來限制它只與接口一起使用? 我假設您可以使用implements而不是extends ,但眾所周知,只有superextends在類型參數聲明中有效。 有解決方法嗎? 還是根本不可能?

我在這里嘗試實現的目標不是出於某種實際目的,而是我只想知道在 Java 中是否可以實現這樣的事情?

有什么方法可以定義一個類型參數,將其限制為僅與接口一起使用?

編譯器無法知道AB是接口還是類,因為這些類型變量只是占位符,實際類型將在運行時提供。

由於類型變量T有多個界限<T extends A & B>只有A可以是一個類, B應該是一個接口。 但是B幾乎可以是任何東西,因此您的構造函數會導致編譯錯誤。

只有“super”和“extends”在類型參數聲明中有效

這是不正確的。 我們只能將super與通配符一起使用,而不能與有界類型一起使用。 T super MyInterface不會編譯。 對於有界類型參數,我們只能使用extends

並且不可能通過使用extends讓編譯器知道B是一個接口。 即使 bound 是一個接口B extends MyInterface它並不意味着B應該是一個接口。

沒有辦法實現你想要做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM