4

请原谅挑衅性的问题标题。众所周知,您永远不应该在 Java 程序中使用公共字段(除非在类似结构的类中,无论如何您都应该避免使用)。但是人们很少谈论硬币的另一面——私有方法。

我的看法是这样的:如果您有私有方法,那么您正在编写本地程序代码。具有私有字段的 Java 类和调用许多私有方法的一些公共方法与具有全局变量和一些函数的 C 模块之间基本上没有区别,其中一些函数在extern其他地方编辑(除了相当大的区别之外您不能实例化 C 模块)。鉴于许多最关心良好 Java 实践的人都认为您应该尽可能远离程序性陈规,我很惊讶没有更多的指导方针限制私有方法的使用。

请注意,我不想建议任何人认为永远不应使用私有方法(或者它们实际上与公共字段一样糟糕)。但这是我的问题,我尽量做到客观:

  • 是否有任何标准的 Java 准则限制使用私有方法? (标准指南的一个例子是“没有公共领域”——尽管您可能会争辩说这是一个意见问题,但几乎普遍接受的是不使用公共领域的良好做法)。
  • 如何使用私有方法绕过?(例如,可以通过将公共字段声明为私有并使用公共 get/set 方法来绕过它们。如果我有一个包含许多私有方法的类,我想我应该创建一个新类来保存它们. 但是如果我这样做了, 那么我冒着编写一个从未实例化并且行为与 C 模块完全相同的 Java 类的风险. 是否有任何广泛使用的设计模式可以帮助我减少类中私有方法的数量? )
4

5 回答 5

10

是否有任何标准的 Java 准则限制使用私有方法?

不。

相反——可以是private应该是什么private。一个类中的很多private方法绝不是一个坏习惯(只要类本身不是太长)。接口应该只提供外部类可用的方法。私下里发生的事情与任何人无关。

public实际上,拥有一个简短的方法和几个私有的方法(即使它们不被重复调用)要好得多,因为它增加了可读性并使得对一个公共方法的高级概述成为可能。如果你有一个public方法可以分成多个独立的部分并且你可以命名这些部分,那就去做吧。使用私有方法。

于 2013-09-06T12:08:00.317 回答
3

私有方法和公共领域一样糟糕吗?

没有好坏之分。它严格基于您的项目设计要求。时期。

如果您想要任何仅由定义类使用且不应暴露给其他类的函数,您只需将其定义为私有。从另一个角度来看,您为什么要通过公开一个在类之外没有意义的方法来公开它。

于 2013-09-06T12:10:23.737 回答
3

一般来说,我不认为私有方法是代码中的设计缺陷。当一个人应该进行大量计算并且他们被迫编写复杂的长方法时,他们可以将其拆分为更小的(私有)方法。如果要在类的许多部分(方法)中使用私有方法,则好处更大。它不优雅,不建议重复相同的代码。

于 2013-09-06T12:02:46.060 回答
1

private,无论如何,方法都不是糟糕的设计。它们是很好的设计,原因与您不想要public字段相同。这个原因就是封装。

private方法通过保护您的代码不被从类外部调用来启用封装。此限制允许您保证对象的状态。

方法的使用private并不使它像一种程序语言。为了在 OO 语言中实现过程语言的效果,需要在字段static上操作方法。static

public static CUnitEquivilent // Don't do this!
{
   private static int SomeVariableDefinedInCFile;

   public static int SomeVariableDefinedInHeader;

   private static SomeMethodDefinedInCFile(...){...}

   public static SomeMethodDefinedInHeader(...){...}
}
于 2013-09-06T12:05:14.943 回答
0

不,他们为什么会不好?鼓励它们,因为您有能力拆分public方法,而不是拥有 200 行或更多行的方法,并且可以在class.

一个缺点是你不能测试你的private方法,但实际上你不应该。因为它们不是用来测试的。(public方法是用来测试的。)

于 2013-09-06T12:05:14.733 回答