gpt4 book ai didi

Java 对未知泛型的反射(reflection)

转载 作者:行者123 更新时间:2023-11-29 03:58:19 26 4
gpt4 key购买 nike

我正在玩 Java 泛型的学习目的,并尝试对它们使用反射。就在我以为我理解了一半的同时,我遇到了我没有找到解决方法的问题。我有一个简单的 Box 类:

public class ReflectionBox<E>  {
protected E e;

public ReflectionBox(){}
public ReflectionBox(E element){ this.e = element; }

public void set(E element){ e = element; }
public E get(){ return e; }
//... a few reflection methods...
}

我扩展了这个类来尝试用它实现一个接口(interface)。这个界面迫使我写这样的声明:

public static final Parcelable.Creator<ParcelableBox<?>> CREATOR = 
new Parcelable.Creator<ParcelableBox<?>>() {
@Override
public ParcelableBox<?> createFromParcel(Parcel source) {
return new ParcelableBox<Object>(source);
}
}

是否可以从 ? 获取类信息使用反射?我无法使用 Object 中的方法在它上面反射(reflect)哪个类放在里面,既不实例化 new ParcelableBox<?>(? element) .包裹不是 E 应该是的类,但我的类是在那个包裹中,应该是 ? 的类别.


编辑:嗨,感谢所有的答案:许多用户不明白,我想做什么:有一个接口(interface)Parcelable ,我认为它作为数据流工作,您可以在其中放置对象成员。你使用类似 parcel.writeString(String string) 的东西或 parcel.writeValue(Object value)存储和parcel.readValue和你把它放进去的方向一样。为了学习,我想将其实现为通用的。所以我希望能够存储到 Parcel,并使用反射从中读取。因为 CREATOR 是静态的,所以我不能使用 E。

最佳答案

不,这是不可能的。泛型也称为“删除”,因为它们在编译期间从类中删除。泛型是在运行时不存在的编译时特性,因此无法检索此信息。

但是有一个解决方法。创造特殊领域Class<?> type;并把你想要检索的类型放在那里。然后取回它。

顺便说一句,您几乎已经有了这个解决方案。你有一个字段 protected E e; .所以,你可以使用 e.getClass()来确定类型。

关于Java 对未知泛型的反射(reflection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057080/

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