Java 我如何处理像豆子一样的POJO?
如何以bean的形式访问简单的java对象 例如: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
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规范是非常具体的,并且这段代码只实现了它的一小部分。