gpt4 book ai didi

java - android中的无处不在的ClassCastException

转载 作者:行者123 更新时间:2023-11-30 03:13:46 27 4
gpt4 key购买 nike

今天早上我醒来发现这个奇怪的异常:

java.lang.ClassCastException: org.apache.harmony.luni.lang.reflect.ImplForVariable cannot be cast to java.lang.Class

当我尝试获取类型参数类时会发生这种情况。

例子:

public static Class getTypeParameterClass(Object o, int index) {
return (Class)
((ParameterizedType)o.getClass()
.getGenericSuperclass())
.getActualTypeArguments()[index];
}

如您所见,此方法获取给定对象类的类型参数之一。

它已经工作了几个月,但今天停止了。

使用示例:

Collection<Object> foo = new ArrayList<Object>();

Class<?> fooClass = Utils.getTypeParameterClass(foo, 0);

它崩溃了。

我是否因为多次指责 java 而受到诅咒;)?

谢谢!

最佳答案

As you can see, this method gets one of the type parameter for a given object's class.

因此,由于通用类型删除,您正在做的事情是特别不允许的。您正在尝试调查 ArrayList 的泛型参数,但是当代码运行时,特定的泛型类型不再可见。

如果您处理的是父类(super class),那么您的父类(super class) hack(它确实是 hack)会起作用。如果您像这样定义 ArrayList ,它将起作用:

Collection<Object> foo = new ArrayList<Object>() {
private static final long serialVersionUID = -594043150300376049L;
};

在这种情况下,foo 是一个扩展 ArraryList 的类。由于某些原因,父类(super class)可以使用泛型类型参数。

关于java - android中的无处不在的ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20498162/

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