Java 从类中检索值:自定义方法还是反射?

Java 从类中检索值:自定义方法还是反射?,java,reflection,Java,Reflection,获取价值​​对于一个只有基元字段(没有方法)作为键值列表的类,您更喜欢使用反射(通过动态迭代)还是返回HashMap的特定方法?你喜欢什么 目前大约有50个班级,但将来可能会增加到另外20或30个(在政权中) 我喜欢反射,但在这种情况下可能没有必要?基于反射的方法更干净,因为它不需要类实现其他方法,而且在将新字段添加到现有类时,您也不需要维护这些方法 基于HashMap的方法在性能方面不会给您带来太多好处,因为原语必须包装在对象中才能插入到映射中-包装的方式与从基于反射的调用返回原语的方式相同。

获取价值​​对于一个只有基元字段(没有方法)作为键值列表的类,您更喜欢使用反射(通过动态迭代)还是返回HashMap的特定方法?你喜欢什么

目前大约有50个班级,但将来可能会增加到另外20或30个(在政权中)


我喜欢反射,但在这种情况下可能没有必要?

基于反射的方法更干净,因为它不需要类实现其他方法,而且在将新字段添加到现有类时,您也不需要维护这些方法


基于
HashMap
的方法在性能方面不会给您带来太多好处,因为原语必须包装在对象中才能插入到映射中-包装的方式与从基于反射的调用返回原语的方式相同。

我假设您会问这个问题,因为您无法修改类,并且这些字段标记为
private
,对吗?您好,字段标记为public,但我需要编写一个通用解析器来获取这些类的所有键值。我认为反射更干净,更易于维护,但为什么需要一个wrap-in对象呢?我可以像这样填充HashMap:HashMap hm=newhashmap();hm.put(“现场1”,10d);hm.put(“现场2”,10f);hm.put(“字段3”,“a”);hm.put(“字段4”,(长)100)。。。是吗?有类似的性能吗?@mrddter您可以调用
hm.put(“field1”,10d)
的原因是:Java编译器为您包装值。这个特性是在Java5中添加的,以使类型擦除泛型可用。明白了!最初,当自动包装问世时,我很怀疑。。那么自动装箱的性能与反射相当?这是决定哪条路是正确的一点better@mrddter这不是自动装箱和反射,我的观点是,由于反射API和散列映射都使用自动装箱,这比直接使用原语慢得多,所以使用散列映射在性能方面比反射的优势并不是很大。您将得到一个带有哈希映射的速度稍快的程序,但这将以潜在的维护噩梦为代价。