gpt4 book ai didi

java - 使用泛型返回动态 JAXBElement

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:45 28 4
gpt4 key购买 nike

我有多个根元素,因此,我需要写

JAXBElement<BookType> jaxbBookType = objectFactory.createBookType (bookType);
JAXBElement<OrderType> jaxbOrderType = objectFactory.createOrderType (orderType);

等等。我不想一次又一次地写这段代码。我正在尝试编写一个方法,该方法将根据其输入返回 JAXBElement。

我想写的是

public <T> JAXBElement<T> getJaxbElement (Object obj){
if (obj instanceof OrderType){
return objectFactory.createOrderType((OrderType)obj);
}
}

但显然,我做错了。由于我对泛型了解不多,看了一段时间后,我仍然很困惑。有人可以在这里帮我一点忙吗?

最佳答案

如果您可以假定使用 instanceof带有参数的运算符,只是转换为 JAXBElement<T>就足够了:

public <T> JAXBElement<T> getJaxbElement (Object obj){
Object ret;
if (obj instanceof OrderType){
ret = objectFactory.createOrderType((OrderType)obj);
}
else if (obj instanceof BookType){
ret = objectFactory.createBookType((BookType)obj);
}
return (JAXBElement<T>) ret;
}

如果你不能,这里的方法名称必须是动态的,一种可能性是使用反射(总是不可靠并且可能会适得其反,产生各种问题)。

请注意,您还必须传递 ClassT以便它在运行时可用(不可能执行 T.getName() ):

public <T> JAXBElement<T> getJaxbElement (Object obj, Class<T> clazz){
ObjectFactory objectFactory = getObjectFactory();
String methodName = "create" + clazz.getName();
Method m = objectFactory.getClass().getDeclaredMethod(methodName, clazz);
Object ret = m.invoke(objectFactory, obj);
return (JAXBElement<T>) ret;
}

关于java - 使用泛型返回动态 JAXBElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12625596/

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