在Java中,内部类的放置惯例是什么?

8

我有一个叫做Util的实用程序类,其中包含一个名为MatrixUtil的静态内部类(以及其他类)。按照惯例,内部类应该放在哪里?

MatrixUtil应该放在Util字段之后但是Util方法之前吗?我无法找到java约定。也许我在API中错过了它......

无论如何,这就是我所说的结构。

public class Util
{
    public static final Vector3f myField;

    public static class MatrixUtil
    {
        public static void myMatrixUtilMethod()
        {
            return;
        }
    }

    public static float myUtilMethod()
    {
        return;
    }
}

代码可以同时使用两种方式,但我想知道哪种是正确的约定。谢谢。


1
尽管你认为哪个更容易阅读,就用哪个。 - ZhongYu
2
这方面没有强烈的惯例。 - Marko Topolnik
好的,谢谢!我一直在找规范,感谢您的澄清! - guyfleeman
1
如果您感兴趣,这里有另一个SO线程处理相同的主题。根据投票结果,我会说嵌套类属于文件底部 :) - Michal Hosala
2个回答

12

我一直遵循“最少惊讶原则”。

当开发人员打开您的源代码时,他们可能会被放置在源代码的顶部。所以首先是重要的内容

随着他们向下滚动源代码,他们应该接着看到不太重要的内容

最后,在结尾处他们应该找到不重要的内容

至于内部类是否重要不太重要不重要,这取决于你的决定。

如果它们是私有类,我肯定会认为内部类非常接近于不重要 - 但是,如果它是某种工厂类,用于创建和操作该类型的对象,则可以认为它们是重要的

在您的情况下 - 您似乎正在使用内部类对方法进行子分类 - 我不会使用内部类来做到这一点,而是使用一个嵌套的包,例如com.....util.matrixutil


1
我避免使用嵌套包的唯一原因是因为该包只包含一个类。我认为包应该包含许多相关的类。因此,我选择了内部类。这种方法可行吗? - guyfleeman
3
一个只包含一个类且该类只包含一个静态方法的独立软件包并不是格式错误,只是新生的。 :) - OldCurmudgeon
1
即使我在不久的将来没有添加它的意图? - guyfleeman
3
你的意图会改变... 给它时间。此外,你应该编写代码以生存超过你的时间。 - OldCurmudgeon
好的!非常感谢您的建议! - guyfleeman

0

我认为,大多数情况是:

  • 将匿名内部类提取为内部类以提高可读性(例如java.util.ArrayList.SubList,JCF和Guava中充满了这些)。
  • 与封闭类大多相关的小类或接口(例如java.util.Map.Entry)。

我想这是我第一次看到一个实用的内部类,但这完全取决于作者。 :-)


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