[英]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.