Apache Commons BeanUtils 获取列表属性

发布于 2024-10-31 08:07:25 字数 294 浏览 4 评论 0原文

在 Apache Commons BeanUtil 中,如何获取列表中的类型?例如

class Track {
   List<Actor> actorList = new ArrayList<Actor>();
}

System.err.println(PropertyUtils.getPropertyType(trackBean, "actorList"));
// it should give me Actor instead of java.util.List

谢谢。

In Apache Commons BeanUtil, how to get a type inside a list ? for example

class Track {
   List<Actor> actorList = new ArrayList<Actor>();
}

System.err.println(PropertyUtils.getPropertyType(trackBean, "actorList"));
// it should give me Actor instead of java.util.List

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你穿错了嫁妆 2024-11-07 08:07:25

我不知道beanutils是否可以。但你可以通过反思来做到这一点。

Field field = Track.class.getDeclaredField("actorList");
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Class clazz = (Class) pt.getActualTypeArguments()[0];

您可能需要进行一些上面的检查(是否可以强制转换、实际类型参数是否存在等),但您已经明白了。

类型信息在运行时被删除,除非它是结构性的——例如字段或类的类型参数。

I don't know if it's possible with beanutils. But you can do so with reflection.

Field field = Track.class.getDeclaredField("actorList");
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Class clazz = (Class) pt.getActualTypeArguments()[0];

You will perhaps need a few check above (whether you can cast, whether the actual type arguments exist, etc), but you get the idea.

Type information is erased at runtime, unless it is structural - e.g. the type argument of a field, or of class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文