【问题标题】:I'm looking for a solution to the excessive verboseness of Java without using Groovy我正在寻找不使用 Groovy 的 Java 过度冗长的解决方案
【发布时间】:2010-10-20 11:30:16
【问题描述】:

我喜欢 Groovy 如何让您的所有实例变量和类变量公开,并代表您编写 getter 和 setter。这节省了很多不必要的编码。另一方面,我的老板讨厌它,让我很伤心:(

有没有办法在 Java 中实现 Groovy 的简洁性,而无需使用 Groovy 或其他一些框架/插件?

我有一种感觉,在我工作的地方引入这个外国框架时,权力不会善待。

因此,我正在寻找一种解决 Java 过于冗长的方法,而无需使用 Groovy 或类似的东西。

是否可以仅在 Java 中完成 - 例如将所有内容都公开?

【问题讨论】:

    标签: java groovy verbosity


    【解决方案1】:

    Java 语言就是这样。如果不迁移到新语言(如 groovy),您不会发现太多可以更改核心语言。获得管理层的支持可能并不像你想象的那么难转向 groovy。几年前,我和你处于类似的位置。您可以开始将 groovy 引入软件的一些有意义的领域。

    一个很好的起点是开始使用它进行单元测试。本质上,当您在 groovy 中编写一个类时,它会编译为 Java 字节码。只要您的类路径中有 groovy jar,其他人甚至可能不知道它是 groovy 代码。通过使用它进行测试,您可以演示它如何简化您的代码并使事情变得更容易。你应该可以把它卖给管理层。

    从那里开始,继续在其他新领域引入它,动态语言可以为您节省一些工作。 Groovy 和 Java 很好地结合在一起,因为它们使用相同的核心库集。

    【讨论】:

      【解决方案2】:

      在这种情况下,可以为您编写 getter 和 setter 的 IDE 可以成为您的朋友。

      我发现必须编写 getter 和 setter 是编写新类中最重复和最无趣的部分。像Eclipse这样的IDE,可以为你automatically generate the getters and setters,可以减少编写冗余代码的痛苦。

      当然,它不会减轻使用getXsetX 方法的需要,但至少它使类的实现更容易一些,负担更少。

      【讨论】:

      • 酷。我使用 Eclipse,但不知道它有这个功能。
      • 除了重构工具之外,我发现 Eclipse 的 getter/setter 生成能力是一个非常有用的特性。
      • IntelliJ IDEA 也会生成 getter 和 setter。
      【解决方案3】:

      使用不可变的数据结构。没有getter,没有setter,没有麻烦。

      您可能想试试Functional Java。它只是一个常规的 Java 库,但带有强大的抽象和有用的(不可变的)数据结构,可以让您用更少的代码说更多。例如,翻译这个:

      List<String> s = new ArrayList<String>();
        for (String x : xs) {
          for (String y : ys) {
            for (String z : zs) {
              s.add(doSomething(x, y, z));
            }
          }
        }
      

      ...到这个:

      List<String> s = xs.bind(ys, zs, doSomething);
      

      【讨论】:

      【解决方案4】:

      您可以使用 AOP 来帮助消除一些冗长。

      例如,如果您有一个属性: 字符串名称;

      然后您可以定义: @GetterSetter 公共字符串名称(字符串名称) { };

      然后有一个寻找注释的方面,并在其上放置一个周围,以便任何读取,即当参数为空或写入(参数不为空)时完成,然后它将采取适当的行动。

      这很容易编写,但你必须获得 AOP 的支持,这可能具有挑战性。

      但是,正如其他人提到的,Eclipse 和 Netbeans 将轻松创建 getter/setter,因此如果您不必对它们做任何特别的事情,那么它应该很容易。

      我倾向于将我的属性放在他们自己的类中,这只是 getter/setter,然后我不必查看冗长性,如果需要,还可以查看 equals 和 hash 方法,然后在我的其他类中我只是使用它,并隐藏无聊的额外编码。

      【讨论】:

        【解决方案5】:

        除了针对特定任务(JPA、Swing 等)的更有效框架之外,我不知道有什么可以让您的源代码更小。

        如果功能通常来自您的 IDE。

        我使用 Netbeans,它具有编写 getter/setter、自动实现抽象方法和各种其他快捷方式的工具。当然源代码还是一样冗长。

        【讨论】:

          【解决方案6】:

          试试我的 bean 注释:http://code.google.com/p/javadude/wiki/Annotations

          注释处理器为您生成一个超类,其中包含您通常必须编写的许多典型样板:

          @Bean(
              properties={
                  @Property(name="name", bound=true),
                  @Property(name="age", type=int.class, bound=true)
              }
          )
          public class Person extends PersonGen {
          }
          

          【讨论】:

            【解决方案7】:

            您可以通过使用特定领域的框架大大提高 Java 的有效抽象级别。例如,当您编写 RESTful Web 服务时,Restlet 会处理大部分无聊的细节。或者,如果您需要在 XML 或 JSON 之间映射 POJO,XStream 或 JAXB 等包会自动生成映射逻辑。为避免繁琐的 JDBC 编程,请尝试使用 iBatis 或 Hibernate 之类的持久性管理器。 Freemarker 和 Velocity 等模板系统可以更轻松地生成标记。

            即使在没有工具支持的情况下,您通常也可以找到将低级细节分解为常用方法和类的方法,以便让您的顶级代码感觉更抽象。

            (您可能会考虑询问您的老板,您是否可以在项目的支持角色中评估 Groovy,例如编写一些单元测试。)

            【讨论】:

              【解决方案8】:

              您可以使用 Groovy 中的任何标准访问修饰符或类型声明来标记任何属性或方法。

              请记住,Groovy 是 Java 的超集。

              【讨论】:

                猜你喜欢
                • 2019-05-13
                • 1970-01-01
                • 2012-11-11
                • 1970-01-01
                • 2023-04-05
                • 1970-01-01
                • 2019-06-20
                • 1970-01-01
                • 2014-07-20
                相关资源
                最近更新 更多