gpt4 book ai didi

java - 尝试获取泛型类型参数时出现 ClassCastException

转载 作者:行者123 更新时间:2023-11-30 08:51:25 29 4
gpt4 key购买 nike

我想使用反射获取泛型实例:

        this.wrapperInstance = ((Class<WRAPPER>) ((ParameterizedType) (getClass().getGenericSuperclass())).getActualTypeArguments()[1]).newInstance();

但我得到异常:

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

不知道问题出在哪里,也许有人可以帮助我?有完整的类代码:

public class XMLUtils<MODEL extends AbstractModel, WRAPPER extends WraperInterface<MODEL>> {

private WRAPPER wrapperInstance;

@SuppressWarnings("unchecked")
public XMLUtils() throws InstantiationException, IllegalAccessException {
this.wrapperInstance = ((Class<WRAPPER>) ((ParameterizedType) (getClass().getGenericSuperclass())).getActualTypeArguments()[1]).newInstance();
}

@SuppressWarnings("unchecked")
public List<MODEL> loadDataFromXML(String fileName) {

try {

File pajamuFile = new File(
UserDataLoader.INSTANCE.getCurrentUserFolder() + fileName);
JAXBContext context = JAXBContext.newInstance(wrapperInstance.getClass());
Unmarshaller um = context.createUnmarshaller();
WRAPPER wrapper = (WRAPPER) um.unmarshal(pajamuFile);
return wrapper.getDataList();
} catch (JAXBException e) {
e.printStackTrace();
return new ArrayList<MODEL>();
}
}

public void saveDataToXML(List<MODEL> dataList, String fileName) {
try {

File pajamuFile = new File(
UserDataLoader.INSTANCE.getCurrentUserFolder() + fileName);
JAXBContext context = JAXBContext.newInstance(wrapperInstance.getClass());
Marshaller m = context.createMarshaller();
WRAPPER wrapper = wrapperInstance;
wrapper.setDataList(dataList);
m.marshal(wrapper, pajamuFile);
} catch (JAXBException e) {
e.printStackTrace();
}
}

在 google 中,我发现大多数情况都是这样,但是对于 spring,这里我没有使用 spring,所以对于我想做的事情,也许有任何明确的解决方案。

最佳答案

Do not know where is problem, maybe someaone can help me

错误消息是不言自明的。以下语句返回一个 Class :

(getClass().getGenericSuperclass())

并且您正在尝试将其转换为 ParameterizedType

((ParameterizedType) (getClass().getGenericSuperclass()))

ClassParameterizedType 是兄弟。兄弟不是姐妹,所以试图把他们放在一起是残忍的。

话虽如此,您的问题的快速解决方案是要求客户端代码将 Class 类型传递给您的 XmlUtils 类。

public class XMLUtils<MODEL extends AbstractModel, WRAPPER extends WraperInterface<MODEL>> {

private WRAPPER wrapperInstance;

public XMLUtils(Class<WRAPPER> wrapperInstance) throws InstantiationException, IllegalAccessException {
this.wrapperInstance = wrapperInstance
}
//more code follows
}

关于java - 尝试获取泛型类型参数时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557421/

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