Java 使用addXX方法的BeanUtils

Java 使用addXX方法的BeanUtils,java,javabeans,apache-commons-beanutils,Java,Javabeans,Apache Commons Beanutils,我使用Apache BeanUtils setProperty方法以通用方式从Excel文件导入数据。我向解析器提供一个“column name”和“property name”对的列表,然后解析器使用setProperty(…,“property name”,…)为与“column name”匹配的Excel字段设置属性。它工作得很好,但现在我遇到了一个问题,我有一个用addXXX()方法设置的属性,我无法更改该类。 如何在不更改此类或解析器的情况下设置此属性? 可能吗? 我可以用DynaCl

我使用Apache BeanUtils setProperty方法以通用方式从Excel文件导入数据。我向解析器提供一个“column name”和“property name”对的列表,然后解析器使用setProperty(…,“property name”,…)为与“column name”匹配的Excel字段设置属性。它工作得很好,但现在我遇到了一个问题,我有一个用addXXX()方法设置的属性,我无法更改该类。 如何在不更改此类或解析器的情况下设置此属性? 可能吗? 我可以用DynaClass、PropertyUtils或MethodUtils制作一个类似于包装器的东西,这样在设置该属性时,它会调用addXX方法吗


谢谢

您可以编写一个decoratorbean类,该类将围绕您的类进行包装,并提供一个setXXX()方法,委托给包装bean的addXXX()。您甚至可以借助动态代理或任何其他字节码插装库来实现这一点


如果你更愿意走DynaClass的路,请先看一下。您必须对其进行扩展,以便为您的方法提供自定义的
PropertyDescriptor
。不过,出于两个原因,我不会这么做——首先,addXXX()语义可能与setXXX()有很大不同;其次,整个DynaClass/DynaBean内部API有点凌乱,而编写自己的decorator类却非常简单。

是的,当一个简单的decorator解决了问题时,为什么要使用WrapDynaClass呢。谢谢我制作了docerator,但是现在我在创建实例时得到了一个java.lang.InstantiationException,就像我以前做的那样。有人知道为什么?
InstantiationException
在类是抽象的或接口的,或者它没有公共的(或调用方可以访问的)无参数构造函数时抛出。你的问题很可能是后者。我的问题是这个类是一个内部类,它需要是静态的!