在Java中,私有助手应该放在公共方法之上还是之下?[关闭]


24

我注意到一个同事和我在Java类中对方法的排序有相反的做法。我们中的一个人开始使用主要的公共方法上课,然后再放置所有私人帮手。我们中的另一个人确保公共方法在最后。

显然,这只是样式问题,没有正确的答案。但是,在我们决定这件事只是Yooks vs Zooks的另一场争执而只是任意选择一个之前,我想知道是否存在标准的Java风格指南推荐,或者某种可行的理由,为什么一种方法比另一种更好。


13
没关系 抛硬币。选一个。坚持下去。


@KilianFoth-这个问题在3个月前被问到,并且有更多答案。那不是使所讨论的问题与该问题重复吗?
Brandon Yarbrough 2014年

Answers:


25

尽管通常确实会偏重于它,但是您当然应该尝试遵循组织内的通用标准。因此,无论您决定什么,都要选择一个标准并普遍采用它。

至于选择哪种方式,如果您要遵循提供的建议 清洁的代码,你将能够从顶部的文件中读取到像报纸上的文章,这自然会认为辅助方法底部出现后,他们的方法帮助。这将导致代码结构的最大可读性。所以如果你有

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

您的文件结构如下

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

这样做的另一个副作用是,您发现您的助手有他们自己的助手,并且可以帮助您弄清您真正拥有的是文件中存在的另一个类,并且您可以干净地重构以将其提取到自己的类中,因为这些方法是已经按顺序分组在一起。但这是次要的好处。


很高兴您说了这个,否则我会的。我问鲍勃·马丁本人,如果两种方法都使用第三种方法,他如何订购东西。在这种情况下,他将第三个放在其他两个下面。
丹尼尔·卡普兰

1
您的示例没有显示它,但是这导致公共方法混入私有方法中。我使用了这种技术,但常常让我感到痛苦,并想将所有公共方法提升到最顶端,因为要轻松阅读公共接口还有很多话要说。
肖恩

@Sean,好吧,我通常会尝试限制类的公共API,或者在适当时将其保留为Facade,然后将实现助手推入协作者。测试,重构,提取,重复。但这当然取决于您要走多远。我更喜欢小班教学。
安东尼·佩格拉姆

11

公共方法是类的接口。对使用您的课程感兴趣的人只关心接口。从类用户的角度来看,首先使用公共方法来减少滚动会很有用。


5

在C和C ++中,通常将辅助方法放在首位,因为这样就不需要声明了。很多人将这种习惯带到了其他无关紧要的语言中。

我更喜欢公共方法,因为通常当我打开文件时,我正在寻找其公共接口。我不想浏览所有实现细节。它碰巧也是我所见过的最受欢迎的样式,因此有一些习惯要说。


2

我喜欢类中方法的顺序基于可读性和上下文,而不是可见性。

也就是说,“打开”方法可能在“关闭”之前。如果两个公共方法“ a”和“ b”都调用了私有“ c”,而只有它们是唯一的调用方法,那么我喜欢“ c”在它们旁边。

我认为基于可见性的方法排序约定不是一件好事。


1

我倾向于选择按重要性/可见性顺序列出成员的课程(在这里,重要性是指对公共界面有直接影响)。

因此,私有功能有被推低的趋势。

除此之外,我还会倾向于将相似的功能组合在一起,因此仍然可以找到与公共事物混合的小型私人功能。

正如您所说,这是一个品味问题。

但是,当处理不是我的代码时,我将尝试并遵循项目中使用的任何约定。

我发现跟踪此问题的一种好方法是(假设您在Eclipse中工作)创建代码格式配置,并将其与项目源一起导出并将其提交给源代码控制。这样一来,该项目中最新,最出色的代码约定只需单击几下即可进行设置,并进行一些CTRL-SHIFT-F操作,否则您将提交大量的参数。

使用自动格式化程序的另一个好处是,您可以按照使您满意的任何约定进行操作,并且只需在提交之前格式化代码即可。YMMV取决于所述约定和格式化工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.