gpt4 book ai didi

java - 在没有警告的情况下转换泛型类型?

转载 作者:搜寻专家 更新时间:2023-11-01 02:47:51 28 4
gpt4 key购买 nike

我有一个很长的故事。

java generics bounds type

generics type declaration for reflection

无论如何,我有一个使用反射调用方法并返回通用结果的方法。

public static <V> JAXBElement<V> unmarshal(..., Class<V> valueType);

问题(?)是当我得到方法调用的结果时。我必须投它。

final Object result = method.invoke(...);

我发现我可以投 result进入JAXBElement<V>像这样。

@SuppressWarnings("unchecked")
final JAXBElement<V> result = (JAXBElement<V>) method.invoke(...);
return result;

还有其他方法吗?我的意思是我得到了 Class<V> valueType使用。

如果不是,下面的语句是不是有点cumbersome

// no warning, huh? :)
final JAXBElement<?> result = (JAXBElement<?>) method.invoke(...);
return new JAXBElement<V>(result.getName(), valueType, result.getScope(),
valueType.cast(result.getValue()));

谢谢。

最佳答案

不,method.invoke(...)甚至整个 Method 都不是通用方法类不是通用的。所以它返回 Object作为结果,你必须施法。

// no warning, huh? :)
final JAXBElement<?> result = ...

是的,没有警告,但 JAXBElement<?>设置了一些限制,例如你不能将值赋给这个数据结构。你可以得到 Objects从那里开始,所以你可能需要稍后在你的代码中加入它......

关于java - 在没有警告的情况下转换泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945399/

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