如何以bean的身份访问简单的java对象?
例如:
class Simple {
private String foo;
String getFoo() {
return foo;
}
private void setFoo( String foo ) {
this.foo = foo;
}
}
现在我想像这样使用这个对象:
Simple simple = new Simple();
simple.setFoo( "hello" );
checkSettings( simple );
所以我正在寻找方法checkSettings( Object obj )
:
public boolean checkSettings( Object obj ) {
// pseudocode here
Bean bean = new Bean( obj );
if( "hello".equals( bean.getAttribute( "foo" ) ) {
return true;
}
return false;
}
java语言包含一个名为java.beans
的包,听起来它可以帮助我。但我找不到一个好的起点。
任何提示?
答案 0 :(得分:6)
我认为您正在寻找的功能类似于BeanAtils类的apache-commons:
http://commons.apache.org/beanutils/
看一下BeanUtils的getProperty()方法。
答案 1 :(得分:2)
java.beans.Introspector.getBeanInfo
会生成一个实现java.beans.BeanInfo
的对象,该对象又可用于获取PropertyDescriptor
和MethodDescriptor
s(通过其getPropertyDescriptors
- 和{ {1}} - 方法),反过来可以用来获取你真正想要的信息。
与使用反射相比,它的努力程度并不高。
答案 2 :(得分:0)
正如上面的问题评论所述,我仍然不确定你想要什么,但听起来你想要包装一个物体得到的& amp;设置为具有getAttribute的接口。这不是我认为的“豆”。
所以你有一个界面:
interface Thingie {
Object getAttribute(String attribute);
}
您必须编写使用反射的实现。
class Thingie {
Object wrapped;
public Object getAttribute(String attribute) throws Exception {
Method[] methods = wrapped.getClass().getMethods();
for(Method m : methods) {
if (m.getName().equalsIgnoreCase("get"+attribute)) {
return m.invoke(wrapped);
}
}
}
}