内部类应该放在哪里?

49

有些人可能会认为这是史上最不重要的问题之一。但是对我来说,代码风格是一个非常重要的话题,我希望能确保我以一种易于阅读的方式编写代码,让自己和大多数开发人员都能够理解。

这就是为什么我想知道你们在哪里声明内部类的原因。

我遵循以下方法排序方案,因为这是相当普遍的:

public void foo() {
    usedByFoo();
}

private void usedByFoo() {
}

public void bar() {
}

我按照从上到下的顺序进行排序,每个方法都尽可能靠近它被使用的地方。

现在我可以用内部类来做同样的事情,就像这样:

class Outer {
    private Inner inner;

    private class Inner {};

    public Outer() {
    }

    ...
}

我认为这是我遵循的最一致的风格,但我经常看到有人将所有内部类声明在文件的顶部或底部。

鉴于我方法排序的方式,应该遵循哪种样式?最常用的做法是什么?


1
我觉得代码风格太主观了...也许我错了。只要把所有东西都文档化。 - NG.
1
也许这更适合发布在http://programmers.stackexchange.com/上。 - Amir Rachum
@Amir 是的,在那里编码风格问题很受欢迎。 - Nikita Rybak
2个回答

67

我会把内部类声明在文件底部 - 通常你对它们的实现不感兴趣,只想访问主类的方法,所以它们不应该妨碍你。


9
我认为应该补充一点,如果内部类太多以至于让人感到困惑,那么就是将其中一些拆分成顶层类的时候了。 - biziclop
看来只有点赞,没有其他回答,那就这样吧,谢谢! - Jason Noack

11

我的偏好是将它们放在最有意义的位置。通常这是在底部,这样它们就不会妨碍视线,但有时我发现把它们放在某个方法组之前更有意义(如果这些方法使用内部类)。

然而,如果类具有大量方法和内部类,那么它的设计可能不佳(内聚性太低)。有时我不小心让类变得这样,以后处理起来就很糟糕 - 如今,如果我看到一个类朝着这个方向发展,我通常会对其进行重构,甚至将其转移到自己的包中。如果你已经有了太多的内部类,不知道该怎么办,我建议采取这种方法。甚至有一些人因为这个原因而建议不要使用内部类(尽管我不同意 - 当正确使用时,它们是非常有价值的资源,你只需要注意不要让它们失控。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接