gpt4 book ai didi

java - 检查 Java 中对象是否被强制转换为其动态类型

转载 作者:行者123 更新时间:2023-12-01 20:53:47 24 4
gpt4 key购买 nike

我想知道是否有一种方法可以检查引用是否已转换为其对象的确切类型。例如...

String s = new String("test");
checkCast(s); //Returns true, since s has a dynamic and static type of String.
Object o = (Object) s;
checkCast(o); //Returns false, since the dynamic and static type of o are not equal.

有关实际问题的一些背景...

我有一个 A、B 和 C 类的层次结构,如下所示:

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

然后我有一个LinkedList<A> A 对象。该列表可能包含上述任何类。然后我有一个像这样的方法......

<T extends A> T getFirstObjInList(){
//Iterate over the list and return the first object that is of type T...
}

我需要知道如何检查列表中的对象是否属于传递到方法中的通用类型。我不能使用instanceof,因为删除等,我真的更喜欢不要更改方法的标题,即添加任何参数或类似的内容。

我首先尝试做的是将列表中的每个对象在 for 循环中转换为 T ,如果抛出 ClassCastException ,则继续迭代,但这显然不适用于我拥有的层次结构,所以现在我寻找一种方法来检查对象是否已转换为其动态类型。 如果列表中的对象属于指定的类型,那么在强制转换时,其静态类型不会改变,因此,如果我可以比较这两种类型,我可以弄清楚该对象是否是实例给定的泛型类型。

注:list.getFirst() instanceof T由于类型删除而无法编译。

最佳答案

正如您现在可能已经得出的结论,您的方法签名由于类型删除而不可行。我建议传递一个显式类型:

<T extends A> T getFirstObjInList(Class<T> type) {
for (A a : list) {
if (a.getClass() == type) {
return type.cast(a);
}
}
return null;
}

关于java - 检查 Java 中对象是否被强制转换为其动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42709832/

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