我有以下情况:
public void method1()
{
if(condition)
{
method2();
}else
{
method3();
}
}
method1()太大了,这就是为什么我把它分成不同的方法。
由于method2()和method3()仅由method1()调用,因此如果它们在类外可见则不会有意义。
我的问题:实现这一目标的正确设计选择是什么?
谢谢
编辑:
我已尝试私有并受到保护,但这些方法不断出现。
e.g:
Class class = new Class();
class.somePrivateOrProtectedMethod(Parameters...);
这仍然是可能的。
答案 0 :(得分:2)
只需将其声明为private
而不是public
:
private void method2() { ... }
这将导致它们对同一文件之外的任何内容都不可见。
但是,即使它位于同一文件中的不同类中,它们仍将对同一文件中的代码可见。
在Java中,始终可以在同一文件中的不同实例(this
除外)上调用私有方法。无法将可见性限制为相同的实例(仅限于同一个类/文件)。
答案 1 :(得分:2)
如果您的问题是Java中是否存在限制将方法调用到单个其他方法的语言结构,则答案是否定的。
你真的不应该担心这一点。您是源代码的所有者。只要您使用private
Philipp pointed out正确封装这些方法,就可以保护您免受外部攻击。你没有理由保护自己免受内心的伤害。
答案 2 :(得分:1)
如果问题是:
(意思是)
(因此)
method2()
和method3()
不应该从method1()
...然后你可以把这三个方法放在一个内部类中,它的唯一目的是运行method1()
。所有方法仍然可以从外部类访问,但代码的结构将提供有关预期用法的提示。
class MyClass {
...
private class ProcessDoer {
public void doProcess() {
if(condition) {
method2();
} else {
method3();
}
}
private void method2() {
...
}
private void method3() {
...
}
}
}
然而,在很多情况下会有点矫枉过正。