jjzjj

Java Bean : Overglorified Associative Arrays?

coder 2024-03-26 原文

我不太了解 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/

有关Java Bean : Overglorified Associative Arrays?的更多相关文章

  1. java - 将 javabean 的图形序列化为 xml,每个 java 实例都有单独的 xml 文件 - 2

    您能否推荐一个框架或工具,可以将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

  2. java - 使用来自 JavaBean 的数据填充 JSP 页面中的复选框 - 2

    我在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

  3. java - 我如何断言两个具有 Javabean 值的 HashMap 相等? - 2

    我有两个HashMap我想比较的map。Question在本例中是我编写的Javabean。我如何断言HashMap是平等的吗?在这种情况下,相等意味着HashMap包含完全相同的Questionbean?如果它完全相关,我正在使用JUnit编写单元测试。 最佳答案 使用Guava,您可以:assertTrue(Maps.difference(expected,actual).areEqual()); 关于java-我如何断言两个具有Javabean值的HashMap相等?,我们在Sta

  4. java - 为什么 "has"不是有效 JavaBean 方法签名的开头? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。JavaBeans方法的签名必须遵循某些约定,例如set.../get...等。他们有一个关于is的约定...例如isEven()可以是Integer类测试boolean值的方法。但是后来我想知道为什么没有...也是一个合法的标识符,因为对我来说测试某物有什么是有意义的,例如hasCar()用于Person类或类似的。你明白我的问题了吗?你怎么看?

  5. java - 从 javabean 类更新数据库是否合适? - 2

    一些背景知识:我正在创建某种游戏。在该游戏中,玩家可以拥有一座房子。房子可能包含家具对象,并且这些家具可能设置了自定义纹理。一件家具可能包含不同数量的纹理。一件家具有几个用于纹理的插槽(0-x)。房子类:publicclassHouse{privateListfurniture;publicHouse(){furniture=newArrayList();}publicListgetFurniture(){returnfurniture;}publicvoidaddFurniture(Furniturefurniture){furniture.add(furniture);}}家具类:

  6. java - Model、javabean、POJO的区别 - 2

    我开始用spring学习MVC。我听过很多次Bean,它包含setter和getter。Model基本上是数据流动的对象,而Pojo与Bean相同。但我真的对这个术语感到困惑,所有这些对我来说都是一样的,你能解释一下它们之间的确切区别吗?JavaBEANPOJO型号 最佳答案 如果您使用的是MVC架构,那么模型代表您的领域:表示您的实体,它不是与Java相关的术语。您的模型在Java中表示为JavaBeans(JavaEE中的最佳实践)。JavaBean是一个普通的Java类,它实现了Serializable接口(interface

  7. java - 使用 Google Guava 过滤 JavaBean 列表 - 2

    在Java程序中,我有一个要根据特定属性过滤的bean列表。例如,假设我有一个Person列表,一个JavaBean,其中Person有许多属性,其中包括'name'。我还有一个名字列表。现在我要查找姓名在名单中的所有人员。使用GoogleGuava执行此过滤器的最佳方法是什么?到目前为止,我一直在考虑将Guava与Apachebeanutils结合起来,但这似乎并不优雅。我还在这里找到了一个反射扩展库:http://code.google.com/p/guava-reflection/,但我不确定如何使用它(文档很少)。有什么想法吗?附言你能说我真的很怀念Python列表理解吗?

  8. java - 使用 Google Guava 过滤 JavaBean 列表 - 2

    在Java程序中,我有一个要根据特定属性过滤的bean列表。例如,假设我有一个Person列表,一个JavaBean,其中Person有许多属性,其中包括'name'。我还有一个名字列表。现在我要查找姓名在名单中的所有人员。使用GoogleGuava执行此过滤器的最佳方法是什么?到目前为止,我一直在考虑将Guava与Apachebeanutils结合起来,但这似乎并不优雅。我还在这里找到了一个反射扩展库:http://code.google.com/p/guava-reflection/,但我不确定如何使用它(文档很少)。有什么想法吗?附言你能说我真的很怀念Python列表理解吗?

  9. java - JRBeanCollectionDataSource : How to show data from the java. util.List 来自 JavaBean? - 2

    我的JavaBean包含java.util.List。Userinfo{privateStringusername;privateStringpassword;ListlistAddress;}如何在Detail波段显示这个List的数据? 最佳答案 这是工作示例。本示例的要点:使用_THIS表达式;在Detail带中使用List(jr:list)组件生成报告的代码片段:publicstaticvoidtestBuildPdf(){try{Mapparams=newHashMap();JasperReportjasperReport

  10. java - JRBeanCollectionDataSource : How to show data from the java. util.List 来自 JavaBean? - 2

    我的JavaBean包含java.util.List。Userinfo{privateStringusername;privateStringpassword;ListlistAddress;}如何在Detail波段显示这个List的数据? 最佳答案 这是工作示例。本示例的要点:使用_THIS表达式;在Detail带中使用List(jr:list)组件生成报告的代码片段:publicstaticvoidtestBuildPdf(){try{Mapparams=newHashMap();JasperReportjasperReport

随机推荐