我正在寻找BeanUtils.getProperty().only的替代方案,原因是我希望有替代方案,以避免最终用户有多一个依赖项。
我正在处理一个自定义约束,这是我拥有的一段代码
final Object firstObj = BeanUtils.getProperty(value, this.firstFieldName);
final Object secondObj = BeanUtils.getProperty(value, this.secondFieldName);因为我需要从对象中获取这两个属性。有没有替代方案,没有任何第三方系统,或者我需要从BeanUtilsBean复制这段代码
发布于 2013-10-16 19:38:19
BeanUtils非常强大,因为它支持嵌套属性。例如“bean.pro1.pro2”,将Map处理为bean和DynaBeans。
例如:
HashMap<String, Object> hashMap = new HashMap<String, Object>();
JTextArea value = new JTextArea();
value.setText("jArea text");
hashMap.put("jarea", value);
String property = BeanUtils.getProperty(hashMap, "jarea.text");
System.out.println(property);因此,在您的例子中,我将只编写一个使用java.beans.Introspector的私有方法。
private Object getPropertyValue(Object bean, String property)
throws IntrospectionException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Class<?> beanClass = bean.getClass();
PropertyDescriptor propertyDescriptor = getPropertyDescriptor(
beanClass, property);
if (propertyDescriptor == null) {
throw new IllegalArgumentException("No such property " + property
+ " for " + beanClass + " exists");
}
Method readMethod = propertyDescriptor.getReadMethod();
if (readMethod == null) {
throw new IllegalStateException("No getter available for property "
+ property + " on " + beanClass);
}
return readMethod.invoke(bean);
}
private PropertyDescriptor getPropertyDescriptor(Class<?> beanClass,
String propertyname) throws IntrospectionException {
BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
PropertyDescriptor[] propertyDescriptors = beanInfo
.getPropertyDescriptors();
PropertyDescriptor propertyDescriptor = null;
for (int i = 0; i < propertyDescriptors.length; i++) {
PropertyDescriptor currentPropertyDescriptor = propertyDescriptors[i];
if (currentPropertyDescriptor.getName().equals(propertyname)) {
propertyDescriptor = currentPropertyDescriptor;
}
}
return propertyDescriptor;
}发布于 2015-03-18 22:37:21
如果你使用SpringFramework,"BeanWrapperImpl“就是你要找的答案:
BeanWrapperImpl wrapper = new BeanWrapperImpl(sourceObject);
Object attributeValue = wrapper.getPropertyValue("attribute");https://stackoverflow.com/questions/19402044
复制相似问题