我不太了解 Java Bean 的本质。好吧,至少我是如何看待它们用于我们商店的一些代码库中的。
我发现了这个问题:
Java Beans: What am I missing?
那里接受的答案看起来像是程序员倾向于滥用 Java Bean(我真的不怀疑),但我看到它经常发生并且故意发生,我想我仍然遗漏了一些东西。
我看到的代码如下:
public class FooBean {
private int a;
private int b;
private int c;
public int getA() { return a; }
public int setA(int x) { a = x; }
// etc...
}
没有比 getter 和 setter 更进一步的结构或控制。是否存在某种 super 棒的编译器技巧,涉及反射、getter 和 setter,以及对一些非常笨拙(但编译器优化的)静态关联数组的需求?
或者我完全没捕获重点。 :\
干杯!
编辑:
这里绝对不是宣传公共(public)领域的想法。
最佳答案
实际上,是的,魔法正在发生。
这是一个非常愚蠢的模式,但是 GUI bean(所有组件都是)旨在由 GUI 构建器进行反射分析。公共(public)设置/获取字段旨在成为用户在构建其 GUI 时可以处理的“属性”。
编辑:为 sun 辩护,我应该说尽管由于所有复制它并开始在他们的非 bean 代码中使用它的人,该模式变得非常令人讨厌,但它确实允许人们将类与不使用任何外部元数据的 GUI 生成器。您不需要编辑器的任何 XML 文件或属性文件,它就像扩展 Button 并将新对象放到托盘上一样简单。
此模式已在其他地方使用,正如您所注意到的,它与拥有公共(public)字段几乎相同。我认为这是 sun 在设置 java 时创建的最糟糕的模式之一,但没有其他明显的解决方案(我认为整个概念有点被第一批试图在 java 发布之前构建第一个 GUI 构建器的人所采用)。
现在有一个更好的解决方案:使用注释来标记私有(private)字段,反射工具仍然可以分析它们并将它们绑定(bind)到构建器控件。这会更干净,并且不会让您的所有对象都容易受到外部状态变化的影响。
关于Java Bean : Overglorified Associative Arrays?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1189260/
您能否推荐一个框架或工具,可以将javabean图形序列化为xml,每个java实例都有单独的xml文件?我设法找到serialzie到单个文件的所有javaxml工具,但我需要它们是分开的,例如:型号:classA{Bb;}classB{}Aa=newA();a.b=newB();序列化为:a.xml:somehowreftobb.xml最好的问候,ebu。 最佳答案 您可以使用JAXB和XmlAdapter来执行如下操作:一个importjava.util.ArrayList;importjava.util.List;impor
我在HTML表单中有一个带有复选框的JSP页面,如下所示现在,在编辑用户技能时,我想从表格中获取逗号分隔的值并填充JSP中的复选框。以下代码从数据库表中获取CSV技能。ListSkills=newArrayList();pstmt=(PreparedStatement)conn.prepareStatement(strSQL);rs=pstmt.executeQuery();StringstrSkills=rs.getString("Skills");Listitems=Arrays.asList(strSkills.split("\\s*,\\s*"));objUserDetails
我有两个HashMap我想比较的map。Question在本例中是我编写的Javabean。我如何断言HashMap是平等的吗?在这种情况下,相等意味着HashMap包含完全相同的Questionbean?如果它完全相关,我正在使用JUnit编写单元测试。 最佳答案 使用Guava,您可以:assertTrue(Maps.difference(expected,actual).areEqual()); 关于java-我如何断言两个具有Javabean值的HashMap相等?,我们在Sta
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。JavaBeans方法的签名必须遵循某些约定,例如set.../get...等。他们有一个关于is的约定...例如isEven()可以是Integer类测试boolean值的方法。但是后来我想知道为什么没有...也是一个合法的标识符,因为对我来说测试某物有什么是有意义的,例如hasCar()用于Person类或类似的。你明白我的问题了吗?你怎么看?
一些背景知识:我正在创建某种游戏。在该游戏中,玩家可以拥有一座房子。房子可能包含家具对象,并且这些家具可能设置了自定义纹理。一件家具可能包含不同数量的纹理。一件家具有几个用于纹理的插槽(0-x)。房子类:publicclassHouse{privateListfurniture;publicHouse(){furniture=newArrayList();}publicListgetFurniture(){returnfurniture;}publicvoidaddFurniture(Furniturefurniture){furniture.add(furniture);}}家具类:
我开始用spring学习MVC。我听过很多次Bean,它包含setter和getter。Model基本上是数据流动的对象,而Pojo与Bean相同。但我真的对这个术语感到困惑,所有这些对我来说都是一样的,你能解释一下它们之间的确切区别吗?JavaBEANPOJO型号 最佳答案 如果您使用的是MVC架构,那么模型代表您的领域:表示您的实体,它不是与Java相关的术语。您的模型在Java中表示为JavaBeans(JavaEE中的最佳实践)。JavaBean是一个普通的Java类,它实现了Serializable接口(interface
在Java程序中,我有一个要根据特定属性过滤的bean列表。例如,假设我有一个Person列表,一个JavaBean,其中Person有许多属性,其中包括'name'。我还有一个名字列表。现在我要查找姓名在名单中的所有人员。使用GoogleGuava执行此过滤器的最佳方法是什么?到目前为止,我一直在考虑将Guava与Apachebeanutils结合起来,但这似乎并不优雅。我还在这里找到了一个反射扩展库:http://code.google.com/p/guava-reflection/,但我不确定如何使用它(文档很少)。有什么想法吗?附言你能说我真的很怀念Python列表理解吗?
在Java程序中,我有一个要根据特定属性过滤的bean列表。例如,假设我有一个Person列表,一个JavaBean,其中Person有许多属性,其中包括'name'。我还有一个名字列表。现在我要查找姓名在名单中的所有人员。使用GoogleGuava执行此过滤器的最佳方法是什么?到目前为止,我一直在考虑将Guava与Apachebeanutils结合起来,但这似乎并不优雅。我还在这里找到了一个反射扩展库:http://code.google.com/p/guava-reflection/,但我不确定如何使用它(文档很少)。有什么想法吗?附言你能说我真的很怀念Python列表理解吗?
我的JavaBean包含java.util.List。Userinfo{privateStringusername;privateStringpassword;ListlistAddress;}如何在Detail波段显示这个List的数据? 最佳答案 这是工作示例。本示例的要点:使用_THIS表达式;在Detail带中使用List(jr:list)组件生成报告的代码片段:publicstaticvoidtestBuildPdf(){try{Mapparams=newHashMap();JasperReportjasperReport
我的JavaBean包含java.util.List。Userinfo{privateStringusername;privateStringpassword;ListlistAddress;}如何在Detail波段显示这个List的数据? 最佳答案 这是工作示例。本示例的要点:使用_THIS表达式;在Detail带中使用List(jr:list)组件生成报告的代码片段:publicstaticvoidtestBuildPdf(){try{Mapparams=newHashMap();JasperReportjasperReport