Java 我如何处理像豆子一样的POJO?

Java 我如何处理像豆子一样的POJO?,java,reflection,javabeans,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( "hel

如何以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(objectobj)

java语言包含一个名为
java.beans
的包,听起来它可以帮助我。但我没有找到一个好的起点


有什么提示吗?

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

看看BeanUtils的getProperty()方法。

生成一个对象实现,它反过来可以用于获取
PropertyDescriptor
s和
MethodDescriptor
s(通过其
getPropertyDescriptors
-和
getMethodDescriptor
-方法),这反过来又可以用来获得你真正想要的信息


这实际上并不比使用反射少。

如上面的问题注释所述,我仍然不确定您想要什么,但听起来好像您想要将对象get&set包装到具有getAttribute的接口。这不是我认为的“豆子”

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);
        }
      }
  }
}
因此,您有一个界面:

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);
        }
      }
  }
}

对不起,这个问题对我来说没有意义。bean只是一个具有公共无参数构造函数和get/set方法的类,我不想显式调用getter。我想使用类似bean的接口,如方法
checkSettings()
中所示。我仍然感到困惑。就我所知,所示的Bean接口与Java Bean无关。标准JDK中没有名为“Bean”的类-因此,如果您提供该类来自哪个包,这将非常有用。我打算在这里放置一些伪代码,如注释所示。但我必须承认,它看起来不像(但请像这样读)。好的,现在我有了一个PropertyDescriptor。如何使用它从给定对象读取属性?明白了<代码>值=PropertyDescriptor.getReadMethod.invoke(对象)。有点复杂,但我用这种方式比使用ApacheBeanutils更灵活。谢谢。除了
isFoo
是名为
foo
的布尔属性的有效名称,
GetFoo
不是getter的有效名称,
GetFoo(int index)
不是Bean getter和。。。基本上,Bean规范是非常具体的,并且这段代码只实现了它的一小部分。