我怎样才能处理像豆子一样的POJO?

时间:2009-10-21 11:44:30

标签: java reflection javabeans

如何以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的包,听起来它可以帮助我。但我找不到一个好的起点。

任何提示?

3 个答案:

答案 0 :(得分:6)

我认为您正在寻找的功能类似于BeanAtils类的apache-commons:

http://commons.apache.org/beanutils/

看一下BeanUtils的getProperty()方法。

答案 1 :(得分:2)

java.beans.Introspector.getBeanInfo会生成一个实现java.beans.BeanInfo的对象,该对象又可用于获取PropertyDescriptorMethodDescriptor 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);
        }
      }
  }
}