在java中放置内部类的约定是啥? [关闭]

Posted

技术标签:

【中文标题】在java中放置内部类的约定是啥? [关闭]【英文标题】: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 处理相同的主题。通过投票我可以说嵌套类属于文件的底部:) 【参考方案1】:

我总是选择principle of least surprise

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

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

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

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

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

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

【讨论】:

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

我认为,大多数情况是:

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

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

【讨论】:

以上是关于在java中放置内部类的约定是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

静态类和内部类的区别是啥

java内部类与匿名内部类作用分别是啥?

Java中静态和非静态内部类之间的非语法区别是啥? [复制]

python内部类的目的是啥?

内部类的公共构造函数是啥意思[重复]

Fragments 作为静态内部类与独立公共类的设计逻辑是啥?