簡體   English   中英

實例化類型參數和覆蓋方法

[英]Instantiating type parameter and override method

我想為模式匹配做一些類似於 Scala 通配符的事情,所以我需要實例化一個T類型的對象,該對象在調用equals()方法時將始終返回true

我知道這有點麻煩,所以如果我試圖在這個對象上調用任何其他函數,我的計算機可能會突然着火,唯一重要的是equals()

到目前為止我所擁有的:

public void match(Object toMatch, Effect0 effect) {
   val bothNull = toMatch == null && value == null;

    val equals = toMatch != null && toMatch.equals(value);

    if(bothNull || equals) {
        effect.f();
    }
}

public static Object any() {
    return new Object() {
        @Override
        public boolean equals(Object o) {
            return true;
        }
    };
}

但我必須以某種方式將any()提升為T類型。

用法如下所示:

myClass.match(new MyClass(any(), "foo", "bar", any()), () -> ...);

重要的是,例如,我不能將Pair<String, Integer>Pair<Integer, String> 所以這就是為什么我需要泛型。

那可能嗎?

簡單地說,你不能。

當您只有一個通用 T 參數時,無法創建它的實例,請參閱此處了解詳細信息。 您可以解決這個問題,例如通過傳遞Class實例,但這仍然意味着反射,並且需要默認構造函數,或啟發式調用哪個構造函數。

但即使您可以實例化該 T,您也無法為此動態創建匿名子類。

暫無
暫無

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

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