2

我想知道在内部调用公共函数是否是一种好习惯。

公共函数是指您显式创建的所有方法/函数,以便从其他对象、模块等调用。例如,您通常会放入 Java 接口定义中的方法。通过内部调用,我的意思是在同一个模块、类等中。

我一直觉得这是某种“滥用”公共方法,尽管我想不出任何有效的技术理由不这样做。

另一种方法是将函数体放在私有函数/方法中,您可以在内部调用它。然后,公共方法的主体将包含对私有函数的单个调用。

我认为这个问题是非常主观的,但仍然......对此有什么想法吗?

4

2 回答 2

3

没有理由不在内部使用公共方法。不要将私有方法包装在公共方法中,这样做没有任何好处,而且它会使您的代码稍微不那么清晰。

于 2009-04-13T12:23:02.473 回答
2

是的,您可以这样做,这是一种很好的做法,但是必须根据情况认真考虑。

两个例子:

  • 注意不要在类构造函数中调用方法:在调用期间,您的类已部分初始化,因此对方法(类本身或继承的)的任何调用都可能产生不好且难以跟踪的后果。根据经验,构造函数必须对类“自满”。

  • 由于您使用的是类的方法,因此您可以自由访问其实现。问问自己“我是想通过它的接口还是通过它的实现来访问这个类?”。

为了更好地解释第二点,假设您有一个带有方法 foo() 和 bar() 的类 A。

假设 foo() 在其代码中调用 bar()。在这种情况下,您正在使用对象的接口。这个界面不可能是你所期望的!例如,假设您已经重新实现了该类(B 类,从 A 派生),但您的代码的用户也重新实现了该类,并且该方法 bar() 已被覆盖。由于继承,A::foo() 将调用 B::bar(),而不是 A::bar()。

通过不使用 bar() 方法调用,而是访问实现,您可以保证您的函数行为相同,即使对于子类也是如此。

其中一些问题进入了所谓的脆弱基类问题。这是一篇关于它的非常好的文章

于 2009-04-13T12:28:05.613 回答