如何处理仅由同一类中的其他方法调用但不应由实例调用的方法?

时间:2015-01-17 17:56:10

标签: java

我有以下情况:

public void method1()
{ 
    if(condition)
    {
        method2();

    }else
    {
        method3();
    }
}

method1()太大了,这就是为什么我把它分成不同的方法。

由于method2()和method3()仅由method1()调用,因此如果它们在类外可见则不会有意义。

我的问题:实现这一目标的正确设计选择是什么?

谢谢

编辑:

我已尝试私有并受到保护,但这些方法不断出现。

e.g:

Class class = new Class();

class.somePrivateOrProtectedMethod(Parameters...);

这仍然是可能的。

3 个答案:

答案 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() {
            ...
        }
    }
}

然而,在很多情况下会有点矫枉过正。