如何从Object类型对象获取指定属性值且不使用字符串操作或正则
解决方案
你完全不需要处理toString()的输出结果,直接从传入的variable对象本身提取属性即可,这也是符合Java开发规范的做法:
方案1:强转后调用getter(首选)
该toString()输出是自定义类Heading的格式化输出,variable参数运行时的实际类型就是Heading类,你只需要做类型判断后强转,调用对应属性的getter方法即可拿到值:
// Java 16+ 支持模式匹配写法 public void method(Object variable){ if (variable instanceof Heading heading) { String value3 = heading.getElement3(); // 此处已获取到value3 System.out.println(value3); } } // 低版本Java兼容写法 public void method(Object variable){ if (variable instanceof Heading) { Heading heading = (Heading) variable; String value3 = heading.getElement3(); System.out.println(value3); } }
如果不知道variable的实际类型,可以临时加一行System.out.println(variable.getClass().getName());打印全类名确认。
方案2:反射提取属性(适用第三方无公开getter的类)
如果Heading是第三方依赖中的类,没有公开的element3属性getter,可以用反射直接读取属性值:
public void method(Object variable) throws NoSuchFieldException, IllegalAccessException { // 获取element3属性 Field element3Field = variable.getClass().getDeclaredField("element3"); // 绕过访问权限校验 element3Field.setAccessible(true); // 读取属性值 String value3 = (String) element3Field.get(variable); System.out.println(value3); }
两种方案都没有用到字符串操作或者正则匹配,完全基于对象本身的属性读取,比解析toString()输出更稳定,不会因为toString()的格式调整导致逻辑失效。
内容的提问来源于stack exchange,提问作者Kalthi
相关产品推荐
相关产品推荐

