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

时间:2009-10-02 14:32:14

标签: java syntax

快速伪美学问题:

对于字段声明,允许以下内容:

int i, j, k;

为整数提供三个变量。方法声明有什么类似的,ala:

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

这样方法可访问性,返回类型等不必冗余指定?我可以想象一些这种语法似乎真正有用的情况(例如,允许各种各样的参数集的方法),所以我希望它在某处。我已经尝试了上述内容,但似乎没有用。

编辑:相对于KLE关于需求的问题,没有要求,更多的是关于需求。我面临的最烦人的事情是我有一类静态的算法(并且应该是静态的,因为它们不依赖于除了它们的参数之外的任何东西),而是采用具有一些限制的泛型参数。每个方法的限制是相同的,并且它确实使代码必须为每个方法重复它们,但是将它们放在类定义中(即public class Foo<U extends Bar>)似乎排除了使方法静态化。 / p>

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

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

声明的共享被认为是不好的做法,因为很容易错过列表中的变量;每行一个声明,眼睛向下扫描,而不需要停止和检查一些线条比其他线条更多。另一个原因是它鼓励人们将所有变量声明在方法/类的顶部,而不是宣布它们迟到以协助GC。

答案 2 :(得分:2)

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

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

现在a和b有不同的内容(它们的泛型类型会有所不同)。这是java 1.3 / 1.4代码,所以没关系。但是现在,当我必须添加泛型时,必须将它分开,并且它变得更加复杂。 int i,j的声明;如果不是因为C / C ++有它们,那么可能不会存在。

因此,对于您的方法声明,确保它节省了一些样板,但牺牲了可读性和可维护性。可读性意味着声明可能与方法的其余部分相距数十或数百行。如果该链中间的那些方法之一必须改变其泛型类型,那么可维护性如何?现在你有一大堆代码必须移动,你必须得到正确的那些逗号。

现在这不是最大的交易,特别是对于现代的IDE,但最重要的是Java不仅仅是简洁的语言,而且它更注重表达性和清晰度,而不是简洁的表达。

在某些情况下,这会伤害DRY,但在这种情况下,这些方法具有相同的返回类型这一事实简直就是巧合,重新声明它们并不是真正的重复。

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

答案 3 :(得分:1)

对于字段来说,这被视为一种不好的做法,你找不到方法。


您能否深入了解您的需求,也许我们可以提出一个不错的选择? : - )

更新


为什么在同一行上定义几个变量是不好的做法? 可读性真的很差。

每个人在自己的行上定义它们并不是什么大不了的事,它在完成IDE的过程中非常快,并且它成为一个标准。有了标准,每个人都会开始获得大量的时间。

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

另外,在同一行上定义它们意味着你不能为它们提供javadoc(或其他注释)......你正在失去可能性......


关于算法是静态的,因为它们只依赖于它们的参数:

  • 让它们变得动态不会更昂贵。如果您想避免对象创建(新)和垃圾收集的开销,则可以拥有每个实例。
  • 随着时间的推移和重构,他们可能会与其中一个参数相关联。因此,该方法可以移动到该类,并成为OO的理想一个处理同一类数据的方法
  • 我们甚至有关于此的模式,例如命令模式,其中在对象中捕获处理。明智地使用这个可以获得很多好东西......