【问题标题】:What is the convention for the placement of inner classes in java? [closed]在java中放置内部类的约定是什么? [关闭]
【发布时间】:2013-11-24 20:24:11
【问题描述】:

我有一个名为 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;
    }
}

代码可以以任何方式工作,但我想知道正确的约定。谢谢。

【问题讨论】:

  • 做任何你认为更容易阅读的事情。
  • 对此没有严格的约定。
  • 好的,谢谢!我很难找到一个约定,所以感谢您的澄清!
  • 如果有兴趣,还有另一个SO thread 处理相同的主题。通过投票我可以说嵌套类属于文件的底部:)

标签: java coding-style inner-classes convention


【解决方案1】:

我总是选择principle of least surprise

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

当他们向下滚动您的来源时,他们接下来应该会看到不太重要的内容

最后,他们应该找到不重要的东西

关于内部类是重要还是不太重要还是不重要,由我决定。

我当然会认为内部类非常接近不重要,特别是如果它们是私有的 - 但是,如果是某种创建和操作该类型对象的工厂类,那么它们可以被视为重要

在您的情况下 - 您似乎使用内部类对方法进行子分类 - 我不会使用内部类来执行此操作,我会使用嵌套包,例如 com.....util.matrixutil

【讨论】:

  • 我避免使用嵌套包的唯一原因是该包只包含一个类。我的印象是包应该包含许多相关的类。出于这个原因,我选择了内部课程。这种方法好吗?
  • @guyfleeman - 一个单独的包只包含一个类,而该类又只包含一个静态方法,这不是错误的 - 只是年轻。 :)
  • 即使我近期没有添加的打算?
  • 你的意图会改变......给它时间。此外 - 你应该编写你的代码来活得更久。
  • 好的!非常感谢您的建议!
【解决方案2】:

我认为,大多数情况是:

  • 为了更好的可读性,将匿名内部类提取到内部类中(即java.util.ArrayList.SubList、JCF 和 Guava 都充满了这些)。
  • 主要与封闭类相关的小类或接口(即java.util.Map.Entry)。

我认为这是我第一次看到实用程序内部类,但这完全取决于作者。 :-)

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2011-06-11
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2014-07-28
    相关资源
    最近更新 更多