java反射获取特定的声明字段值为String
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java反射获取特定的声明字段值为String,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2390字,纯文字阅读大概需要4分钟。
内容图文
![java反射获取特定的声明字段值为String](/upload/InfoBanner/zyjiaocheng/735/37deb5119da1446fadd2892932cc8bf9.jpg)
我在RequestDto中有一个声明的字段为(requestDto有许多声明的字段,但我只想要这个自定义字段)
private String custom;
我想得到这个声明的字段名称Custom as String
像字符串名称 – “自定义”(但自定义必须是动态的)
解决方案必须是不修改默认的getter和setter
实际上我有一个问题,比如当一个requestDto被处理用于内容验证时,如果请求Dto中的一个字段有一个坏数据我应该提供一个错误消息以及字段名称为字符串,其中包含无关数据
问题是将来在RequestDto中修改自定义字段时,修改它的人甚至不会知道自定义字段被设置为字符串并且它被使用,所以我想将自定义字段名称作为字符串从RequestDto只有,所以当字段值改变时,我得到字符串中更改的名称
解决方法:
编辑:在评论中添加了最重要的信息后“如果有人在将来更改该名称会怎么样”……好吧……那么反思就不是了!
我宁愿使用类似函数< RequestDto,String>的东西.或类似的,例如:
static String getCustom(RequestDto requestDto, Function<RequestDto, String> customExtractor) {
return customExtractor.apply(requestDto);
}
并通过以下方式调用:
RequestDto someRequest = ...;
getCustom(someRequest, RequestDto::getCustom);
如果该字段在将来被重构,那么该部分也将被重构,然后自动(好吧……可能取决于您的IDE ;-)).但是……它不会为您提供相应的字段名称作为错误消息.请注意,没有一种很好的方法来捕获正确的字段,如果获得它的唯一属性是它的名称.如果要在该字段中添加注释,则可以使用该特定注释过滤并获取该字段.这样你就不需要知道实际名称……但是反问题:你怎么能确定只有1个字段被注释?我宁愿重新设计你的应用程序的特定部分.我不会将任何字段暴露给“客户”.如果这意味着我在错误消息和字段名称中可能有不同的名称,那就这样吧.
另请注意,现代IDE还允许您重构字符串(重命名字段时).您只需确保此信息在整个团队(以及未来的成员)中传播.
以前的答案使用反射:
如果动态是指它必须以该名称开头或包含该名称,您可能需要使用如下内容,即getDeclaredFields()并迭代它们以过滤掉感兴趣的字段:
private static String getCustom(RequestDto requestDto) throws NoSuchFieldException, IllegalAccessException {
return Arrays.stream(requestDto.getClass().getDeclaredFields())
.filter(e -> e.getName().startsWith("custom"))
.findFirst() // if the first match suffices
.map(f -> { // you may want to extract that part if you use streams
f.setAccessible(true);
try {
return (String) f.get(requestDto);
} catch (IllegalAccessException e) {
// TODO whatever you need to do...
return null;
}
}).orElseThrow(IllegalArgumentException::new); // or whatever suites better
}
如果您需要按类型或注释等进行过滤,此示例应该足够了.然后相应地调整过滤器.
如果它只是您需要的字段名称,那么它就是您想要的Field.getName().
内容总结
以上是互联网集市为您收集整理的java反射获取特定的声明字段值为String全部内容,希望文章能够帮你解决java反射获取特定的声明字段值为String所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。