gpt4 book ai didi

Java 泛型 : Comparing the class of Object o to

转载 作者:IT老高 更新时间:2023-10-28 20:22:20 33 4
gpt4 key购买 nike

假设我有以下类(class):

public class Test<E> {
public boolean sameClassAs(Object o) {
// TODO help!
}
}

如何检查 o 是否与 E 相同?

Test<String> test = new Test<String>();
test.sameClassAs("a string"); // returns true;
test.sameClassAs(4); // returns false;

我无法从 (Object o) 更改方法签名,因为我正在覆盖父类(super class),因此无法选择我的方法签名。

我也不想继续尝试强制转换,然后在失败时捕获生成的异常。

最佳答案

Test 的一个实例没有关于 E 的信息是在运行时。因此,您需要通过 Class<E>到Test的构造函数。

public class Test<E> {
private final Class<E> clazz;
public Test(Class<E> clazz) {
if (clazz == null) {
throw new NullPointerException();
}
this.clazz = clazz;
}
// To make things easier on clients:
public static <T> Test<T> create(Class<T> clazz) {
return new Test<T>(clazz);
}
public boolean sameClassAs(Object o) {
return o != null && o.getClass() == clazz;
}
}

如果您想要“instanceof”关系,请使用 Class.isAssignableFrom而不是 Class比较。注意,E出于同样的原因 Test 将需要是非泛型类型需要Class对象。

有关 Java API 中的示例,请参阅 java.util.Collections.checkedSet和类似的。

关于Java 泛型 : Comparing the class of Object o to <E>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51582/

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