使用反射打印列表

2024-01-28

 public class Service{ 
       String serviceName;
      //setter and getter
  }

  public class Version{ 
       int VersionID;
      //setter and getter
  }

  public void test(Object list){

        //it shd print the obtained list

   }

列表列表1; //服务是一个Bean
列表列表2; //版本是一个Bean
测试(列表1);
测试(列表2);

现在测试方法 shd 打印获得的列表 - (即)如果列表是类型Service,那么 serviceName 应该使用它的 getter 来打印。如果列表类型是Version应该打印版本ID。
是否可以在不使用接口或抽象类的情况下实现这一目标?


@danLeon 到目前为止有最简单的想法(添加toString到课程),假设您有权访问Service and Version.

我不确定你为什么要考虑反射,但我唯一能想到的是你想要一些可以与任何具有单一属性的对象一起使用的东西Stringgetter,然后你会做这样的事情(我认为这很疯狂,但它使用反射):

Class clazz = list.get(0).getClass();
Method[] methods = clazz.getDeclaredMethods();
Method onlyStringGetter = null;
for (Method method: methods) {
    String mName = method.getName();
    if (mName.matches("get\w+") {
        if (method.getReturnType().equals(String.class) {
            if (onlyStringGetter != null) thrown new RuntimeException("More than one String getter available");
            onlyStringGetter = method;
        }
    }
}
if (onlyStringGetter == null) throw new RuntimeException("No String getter found for class: " + clazz.getName());
List<String> strings = new ArrayList<String>();
for (Object singleStringAttribObj: list) {
    // some exception handling needed for below
    String result = (String)onlyStringGetter.invoke(singleStringAttribObj);
    strings.add(result);
}
System.out.println(strings);

我没有编译或尝试过,但这大约是正确的。肯定需要一些额外的异常处理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用反射打印列表 的相关文章

随机推荐

  • maven-shade-plugin 报告:创建着色 jar 时出错:...target/classes(是一个目录)

    当使用 m2eclipse 工具在 eclipse 中为配置为以下项目的项目运行 Maven 构建时Maven 阴影插件 https maven apache org plugins maven shade plugin 构建失败并显示以下
  • ResponseEntity 不接受文本/csv:Spring Boot

    我正在尝试创建一个接受 CSV 和 json 正文请求等文件的 API 我尝试使用ResponseEntitySpring Boot 中的对象 端点如下所示 PostMapping value csv consumes MediaType
  • 左侧 div 在 bootstrap 中未正确对齐[重复]

    这个问题在这里已经有答案了 我的代码中已经有粘性标头 我正在尝试在左侧添加一个粘性 div 最初看起来不错 当我尝试滚动内容时 布局正在改变 此外 在最小尺寸 移动尺寸 时 左侧 div 未正确对齐 请建议 var onResize fun
  • 如何通过 RxJs 合并或 groupBy toPromise?

    我有以下方法返回结果 如下所示 result status 200 status 200 status 400 我需要使用状态值对结果进行分组 并且对于上面的示例结果仅返回 2 个结果 而不是 3 个 update this demoSer
  • 这个Makefile 有什么问题吗?

    当我在以下 Makefile 上运行 make all 时 出现此错误 Makefile 5 缺少分隔符 停止 这是什么问题以及如何修复它 LEX lex YACC yacc CC gcc calcu y tab o lex yy o CC
  • GCC 左移溢出

    下面的小程序在 Mac 上使用 GCC 版本 4 2 1 Apple Inc build 5664 非常尴尬 include
  • Node+Express+MongoDB Native Client 性能问题

    我正在使用 MongoDB 测试 Node js ExpressJS Fastify Python Flask 和 Java 带有 webflux 的 Spring Boot 的性能 我将所有这些示例应用程序相继托管在同一台服务器上 因此所
  • 如何调试 GLSL 着色器?

    我需要调试 GLSL 程序 但我不知道如何输出中间结果 是否可以使用 GLSL 进行一些调试跟踪 例如使用 printf 而不使用像 glslDevil 这样的外部软件 您无法轻松地从 GLSL 内部与 CPU 进行通信 使用 glslDe
  • 如何仅显示一次网站预加载器

    我向我的网站添加了预加载器 每次访问该网站时都会播放预加载器动画 我希望它在每次访问域名时只播放一次 任何点击网站上的主页按钮或浏览器中的后退按钮我希望跳过预加载器 我希望它在任何时候在新选项卡或新浏览器窗口中打开时都显示出来 我尝试添加c
  • Python 日志记录:覆盖日志时间

    下列的Python 的文档 http docs python org library logging html logging Formatter formatTime 我正在尝试覆盖logging Formatter converter以
  • 新类型比枚举更快吗?

    根据本文 http www haskell org haskellwiki Performance Data types 就 GHC 而言 枚举不算作单构造函数类型 因此当用作严格构造函数字段或严格函数参数时 它们不会从解包中受益 这是 G
  • 如何处理 SVG 像素捕捉

    我正在尝试使用路径元素渲染两条 svg 线 第一行宽度为 1px 并且很锐利 第二条线宽度为 2px 并且很模糊两者的笔划宽度相同 如何解决这个问题
  • 防止在 Ruby 中将字符串转换为八进制数

    假设我们有以下 ruby 代码 require yaml h key gt step1 gt 0910 1223 puts h to yaml 0910 是一个字符串 但是之后to yaml转换 字符串变成八进制数 key step1 09
  • 哪一个 NoSQL 数据库(如果有)可以为查询结果集提供*更改*流?

    哪个 NoSQL 数据库 如果有的话 可以提供changes到查询结果集 有人能给我举一些例子吗 首先 我相信没有一个 SQL 数据库提供此功能 我是对的吗 我需要能够指定任意 简单的查询 其在 SQL 中的等价形式可以写成 SELECT
  • 控制 zenity 窗口中内容的大小?

    我可以控制 a 的大小zenity http en wikipedia org wiki Zenity窗口与 width和 height论点 zenity info text This is an information box width
  • Angular ui-select:如何仅将选定的值绑定到 ng-model

    scope property new Property scope property propertyType scope propertyTypes value ResidentialPlot name Residential Plot
  • 现有内部主题具有无效分区

    当在只有一个 Kafka 代理的测试设置中启动我们的 Kafka Streams 应用程序时 我们大约在 15 次运行中看到以下错误 org apache kafka streams errors StreamsException Exis
  • 如何将特定标签/版本与作曲家和私有 git 存储库一起使用?

    我在我公司的 Gitlab 上托管了一些包 我想请求这些包的特定版本 但每次尝试时 composer 都会下载 master 分支的最新提交 作曲家 json name MyProject require user project v0 5
  • 从 Powershell 传递实际的返回代码

    我有一个命令行 exe 实用程序 需要内联密码才能调用 显然 这并不理想 因此我创建了一个 PS 包装器来加密密码并存储它 从 PSCredential 对象调用它 所有这些都工作正常 但我需要错误处理 如果我添加exit LASTEXIT
  • 使用反射打印列表

    public class Service String serviceName setter and getter public class Version int VersionID setter and getter public vo