如何确定 Java 中泛型字段的类型?

2023-12-19

我一直在尝试确定类中字段的类型。我已经看过所有的内省方法,但还没有完全弄清楚如何去做。这将用于从 java 类生成 xml/json。我已经查看了这里的一些问题,但还没有找到我真正需要的。

Example:

class Person {
    public final String name;
    public final List<Person> children;
}

当我编组这个对象时,我需要知道chidrenfield 是类型对象的列表Person,这样我就可以正确地编组它。

我曾尝试过

for (Field field : Person.class.getDeclaredFields()) {
    System.out.format("Type: %s%n", field.getType());
}

但这只会告诉我这是一个List, not a List of Persons

Thanks


看一下获取字段类型 http://java.sun.com/docs/books/tutorial/reflect/member/fieldTypes.html来自 Java 教程追踪:反射 API http://java.sun.com/docs/books/tutorial/reflect/.

基本上,你需要做的就是获得所有java.lang.reflect.Field http://java.sun.com/javase/6/docs/api/java/lang/reflect/Field.html你班级的并打电话Field#getType() http://java.sun.com/javase/6/docs/api/java/lang/reflect/Field.html#getType%28%29在他们每个人上(检查下面的编辑)。要得到all对象字段包括 public、protected、package 和 private 访问字段,只需使用Class.getDeclaredFields() http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getDeclaredFields%28%29。像这样的事情:

for (Field field : Person.class.getDeclaredFields()) {
    System.out.format("Type: %s%n", field.getType());
    System.out.format("GenericType: %s%n", field.getGenericType());
}

EDIT:正如所指出的wowest https://stackoverflow.com/users/49237/wowest在评论中,你实际上需要打电话Field#getGenericType() http://java.sun.com/javase/6/docs/api/java/lang/reflect/Field.html#getGenericType%28%29,检查是否返回Type http://java.sun.com/javase/6/docs/api/java/lang/reflect/Type.html is a ParameterizedType然后相应地获取参数。使用ParameterizedType#getRawType() http://java.sun.com/javase/6/docs/api/java/lang/reflect/ParameterizedType.html#getRawType%28%29 and ParameterizedType#getActualTypeArgument() http://java.sun.com/javase/6/docs/api/java/lang/reflect/ParameterizedType.html#getActualTypeArguments%28%29获取 a 的原始类型和类型参数的数组ParameterizedType分别。下面的代码演示了这一点:

for (Field field : Person.class.getDeclaredFields()) {
    System.out.print("Field: " + field.getName() + " - ");
    Type type = field.getGenericType();
    if (type instanceof ParameterizedType) {
        ParameterizedType pType = (ParameterizedType)type;
        System.out.print("Raw type: " + pType.getRawType() + " - ");
        System.out.println("Type args: " + pType.getActualTypeArguments()[0]);
    } else {
        System.out.println("Type: " + field.getType());
    }
}

并会输出:

Field: name - Type: class java.lang.String
Field: children - Raw type: interface java.util.List - Type args: class foo.Person
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 Java 中泛型字段的类型? 的相关文章

随机推荐

  • “返回等待承诺”和“返回承诺”之间的区别

    鉴于下面的代码示例 行为是否有任何差异 如果有 这些差异是什么 return await promise async function delay1Second return await delay 1000 return promise
  • 正则表达式正在捕获整个字符串

    我正在使用以下正则表达式 public private function a zA Z 0 9a zA Z 0 9a zA Z 匹配以下字符串 public function messenger text sendMsg text priv
  • 在python中查找二维数组中数字对的频率

    我想找到二维数组中成对的频率 输入示例如下 list of items 12 14 18 12 19 54 89 105 14 19 54 88 105 178 预期输出如下 12 14 1 12 18 1 12 19 1 12 54 1
  • 对话插件与 ActionFlow

    谁能详细说明 Struts2 Conversation 插件和 ActionFlow 插件之间的区别以及我何时应该选择其中之一 Regards 它们是用于不同目的的完全不同的插件 Conversation插件添加conversation范围
  • 扩展 Outlook 2010 附件上下文菜单

    我正在以 xml 形式扩展 Outlook 2010 中附件显示的上下文菜单 到目前为止 我已经有了一个按钮和一个 onAction 事件的处理程序 有人可以帮助我如何从这里获取当前选择的附件吗 好的 我知道了 http msdn micr
  • Asp.net 多语言 Web 应用程序 - 本地化

    您对构建 asp net 多语言本地化 Web 应用程序 仅字符串资源的 UI 本地化 的最佳方法有何看法 尤其是这两件事 如何存储资源 Xml 文件 resx 文件还是其他文件 如何处理 URL 我不想一直将语言参数保留在查询字符串中 所
  • 我需要构建什么才能在内核级别直接访问以太网帧位?

    我想检索线路上所有以太网帧的以太网帧位 无论它们是否发往我的机器 MAC 级别 其逻辑必须位于内核级别 所以为了实现这一目标 我需要构建一个独立的内核模块 or 以太网驱动程序 or 以太网网络接口 注意 我刚刚开始为我的项目学习 Linu
  • 具有白色工具栏和深色文本的应用程序

    我一直在尝试在一个项目中实现这一目标最小SDK 16 操作栏和状态栏为白色 带有深色文本和图标 像这样 多年来我一直在试图解决这个问题 谷歌搜索得到了很多没有任何意义和 或不支持旧 API 的答案 colorControlNormal ti
  • 按照 razor 语法显示文字句点

    如何转义剃刀引擎以在属性值后打印文字句点 编译器将句点解释为后跟方法或属性 因此它会抛出 PDF 不是有效属性或方法的错误 col Custom a href http someurl item INSTRUMENT NUM pdf ite
  • 如何在 React Native 中禁用键盘外观动画

    当用户开始聚焦文本输入时 键盘将从底部移入 开始对焦时如何避免出现此动画 我刚刚阅读了 TextInput Keyboard 的文档 但文档中没有提到相关参数 https facebook github io react native do
  • 完全停止android webview

    我有一个android webview 并允许用户在window onload回调中使用自己的javascript 它完全隔离 我个人没有看到安全风险 如果输入类似以下内容 就会出现问题 while true 在 java 方面 我启动一个
  • Google Places 自动完成、地理编码和地址验证

    我的代码遇到了挑战 我有一个 JS 和 HTML 代码 允许用户输入他们的地点地址并将其提交到我的 Firebase 数据库 无论用户在地址输入中输入什么 代码都应首先检查它是否是有效输入 而不是像 thsd 这样的随机单词 从技术上讲 t
  • Laravel 5.1 - 路线不起作用

    我的路线有问题 我有我的路线 Route get dashboard password UserController password Route post dashboard updatepassword UserController u
  • 如何在Nuxt3配置中配置vite HMR端口?

    我在 Docker compose 设置中使用 Nuxt3 其中端口 8001 是通过 nginx 反向代理通道运行 Nuxt3 的节点容器的可访问端口 我的 nuxt config ts 看起来像这样 import defineNuxtC
  • ActivityUnitTestCase 和 ActivityInstrumentationTestCase2 之间的区别

    我是 Android Instrumentation 案例的新手 我一直在查看 API 示例 发现有时我们使用 ActivityUnitTestCase 和 ActivityInstrumentationTestCase2 两者有什么区别
  • 不同类型的数据库索引?

    我正在尝试编译非系统特定数据库索引的列表 我研究过 Oracle DB2 MySQL Postgres 和 Sybase 几乎每个资源都有不同的列表 到目前为止我已经看到 clustered multi dimensional cluste
  • 如何使用javascript中的函数应用复选框?

    如何使用javascript中的函数应用复选框 未选中复选框时如何隐藏具有特定标签的帖子 对象 我只需要知道如何设置在打开页面时自动检查复选框的功能以及如何隐藏带有特定标签的帖子 对象的复选框 申请是否正确 display none or
  • 当新文件添加到监视文件夹时,Java NIO 监视服务创建了“ENTRY_CREATE”和“ENTRY_MODIFY”

    我使用 java nio file WatchService 看到了一个奇怪的行为 不确定这是预期的行为 问题是我有一个向 WatchService 注册的文件夹 当我将一个新文件复制到此文件夹中时 会生成两个 WatchEvent 每个事
  • 下载当前 html 文件

    怎么可能让用户下载当前的html页面呢 网页使用ajax加载文本 所以我的代码不起作用 因为它下载了页面的原始状态 a href URL OF THIS PAGE Download a a href Download a 这是如何运作的 我
  • 如何确定 Java 中泛型字段的类型?

    我一直在尝试确定类中字段的类型 我已经看过所有的内省方法 但还没有完全弄清楚如何去做 这将用于从 java 类生成 xml json 我已经查看了这里的一些问题 但还没有找到我真正需要的 Example class Person publi