gpt4 book ai didi

java - 实例化类型参数和重写方法

转载 作者:行者123 更新时间:2023-11-30 05:48:57 29 4
gpt4 key购买 nike

我想做一些类似于Scala的通配符的模式匹配,所以我需要实例化一个 T 类型的对象总是会返回 true当调用equals()时- 方法。

我知道这有点hacky,所以如果我尝试在这个对象上调用任何其他函数,我的计算机可能会起火,唯一重要的是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 参数时,无法创建其实例,请参阅 here了解详情。您可以解决这个问题,例如通过传递 Class 的实例,但这仍然意味着反射,并且需要默认构造函数,或者启发式调用哪个构造函数。

但即使您可以实例化该 T,您也无法为其动态创建匿名子类。

关于java - 实例化类型参数和重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54309097/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com