gpt4 book ai didi

java - 如何使用泛型进行 instanceof 和类型转换

转载 作者:行者123 更新时间:2023-12-03 18:37:07 26 4
gpt4 key购买 nike

在下面的代码中,我有两个方法 as_Aas_B,它们基​​本上做同样的事情,但是类型 A 和 B 不同。我如何合并这两个方法进入一个参数化方法? as_T 中显示的方法不起作用,因为泛型类型在运行时被删除。

class A {}
class B extends A {}
class C extends A {}

B as_B(A a) {
if (a instanceof B)
return (B) a;
else
return null;
}

C as_C(A a) {
if (a instanceof C)
return (C) a;
else
return null;
}

<T extends A> T as_T(A a) {
if (a instanceof T) // compile error because of type erasure
return (T) a;
else
return null;
}

最佳答案

正如您自己所说,T 已被删除,并且编译器会阻止涉及泛型类型或类型参数的 instanceof 检查。

根据您使用 as_T 方法的方式,您可以使用对应于 T 的类实例调用它,而不会出现编译时警告:

<T extends A> T as_T(A a, Class<T> type) {
if (type.isInstance(a))
return type.cast(a);
else
return null;
}

所以当你需要一个给定的子类类型时,你可以调用它:

C c = as_T(a, C.class);
B b = as_T(a, B.class);

关于java - 如何使用泛型进行 instanceof 和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59116274/

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