代码之家  ›  专栏  ›  技术社区  ›  Carl

Java语法:方法声明中的快捷方式?

  •  0
  • Carl  · 技术社区  · 15 年前

    快速问题:

    对于字段声明,允许执行以下操作:

    int i, j, k;
    

    public int getI() {/* ... */},
    getJ() {/* ... */},
    getK() {/* ... */};
    

    这样就不必冗余地指定方法的可访问性、返回类型等?我可以想象,在某些情况下,这种语法似乎真的很有用(例如,允许使用各种参数集的方法),所以我希望它就在那里的某个地方。我试过上述方法,但似乎不起作用。

    编辑:相对于KLE关于需求的问题,没有需求,更多的是关于需求。我面临的最恼人的事情是,我有一个由一堆算法组成的类,这些算法是静态的(并且应该是静态的,因为它们只依赖于它们的参数),但是使用一个带有一些限制的通用参数。每个方法的限制都是相同的,代码必须对每个方法重复这些限制,但将它们放在类定义中(即。, public class Foo<U extends Bar> )似乎排除了使方法静态化的可能性。

    另外:有人能详细说明为什么使用共享字段声明被认为是不好的做法吗?我想我可以在商业应用领域欣赏这种观点,但在科学应用领域似乎有点奇怪——共享类型字段似乎是一种明显而简单的方法,可以指示什么时候事物应该是同一种事物。

    4 回复  |  直到 15 年前
        1
  •  9
  •   gimpf    15 年前

    不,它不存在,不,你也不应该对变量这样做。原因:可维护性、可读性。

        2
  •  2
  •   Jim Downing    15 年前

        3
  •  2
  •   Yishai    15 年前

    它被认为是字段的糟糕形式,尤其是涉及泛型时。考虑这个(现实世界的情况)前通用代码:

    private Map a = new HashMap(), b = new HashMap();
    

    现在a和b有不同的内容(它们的泛型会有所不同)。这是Java1.3/1.4代码,所以没关系。但现在,当我必须添加泛型时,必须将其拆分,这将成为一个更复杂的更改。int i,j的声明;如果不是因为C/C++拥有它们的话,它可能不存在。

    因此,对于您的方法声明,它确实保存了一些样板文件,但牺牲了可读性和可维护性。可读性,即声明可能与方法的其余部分相距数十行或数百行。可维护性是指如果中间链中的那些方法中的哪一个必须改变它们的泛型类型呢?现在你有一大堆代码需要移动,你必须正确使用逗号。

    现在这并不是最大的问题,特别是对于现代IDE,但最重要的是Java不是简洁的语言,它重视表达性和清晰性而不是简洁的表达。

    在某些情况下,这会损害DRY,但在本例中,这些方法具有相同的返回类型只是巧合,重新声明它们并不是真正的重复。

    无论如何,宏扩展(如果有的话)将是解决这个问题的更合适的方法(不是说Java很快就会得到这样的结果)。

        4
  •  1
  •   KLE rslite    15 年前

    对于字段,这被视为一种不好的做法,对于方法,您不会发现它。


    你能深入了解你的需求吗,也许我们可以提出一个不错的替代方案?:-)


    为什么在同一行上定义多个变量是一种不好的做法?

    在各自的行中定义它们并没有什么大不了的,在IDE中完成它们真的很快,并且成为一种标准。有了标准,每个人都会开始获得很多时间。

    而且,在同一行上定义它们会使在一秒钟内更改其中一些变得更加困难!就像评论一个。。。

    此外,在同一行中定义它们意味着您不能为它们提供javadoc(或其他注释)。。。你正在失去机会。。。


    关于 静态算法 因为他们只依靠自己的论点:

    • 它是 不贵 让它们充满活力。如果希望避免对象创建(新建)和垃圾收集的开销,则可以使用每个实例的单个实例。
    • 随着时间的推移和重构,它们 可能与他们的一个论点有关 . 因此,该方法可以移动到该类,并成为 完美的 处理同一类数据的方法
    • 我们甚至有这样的模式,比如命令模式,在对象中捕获处理。明智地使用它可以获得许多好处。。。