Java 非公开课放在哪里?

Java 非公开课放在哪里?,java,coding-style,Java,Coding Style,假设我有一个Java类a,它需要一个助手类B。该helper类仅用于A,没有其他用途。另外,B不需要以任何方式使用A(不要调用方法或访问字段) 所以,问题是:把B放在哪里 有以下几种选择: 静态嵌套类。在我看来,它只是让代码变得不那么清晰(更多的缩进等等) 同一源中的非公共类。我喜欢这个选择 public class A { ... } class B { ... } 独立源中的非公共类。不过,看起来这个选项有点开销 // A.java pub

假设我有一个Java类a,它需要一个助手类B。该helper类仅用于A,没有其他用途。另外,B不需要以任何方式使用A(不要调用方法或访问字段)

所以,问题是:把B放在哪里

有以下几种选择:

  • 静态嵌套类。在我看来,它只是让代码变得不那么清晰(更多的缩进等等)

  • 同一源中的非公共类。我喜欢这个选择

    public class A {
        ...            
    }
    
    class B { 
        ... 
    }
    
  • 独立源中的非公共类。不过,看起来这个选项有点开销

    // A.java
    public class A {
        ...            
    }
    
    // B.java
    class B { 
        ... 
    }
    
  • 现在,我更喜欢第二种选择。你对此有什么想法?最佳做法是什么? 有权威的消息来源吗?

    有帮助吗

    没有严重的缺点,但可以肯定的是,至少有几个缺点,包括:

    • 难以理解-特别是对于没有经验的程序员,他们可能会发现编码、增强和维护都很困难
    • 更多的类-它肯定会增加应用程序使用的类的总数。对于加载到内存中的每个类,JVM都为其创建一个class类型的对象。可能还有其他一些例行任务,JVM可能需要为所有额外的类执行这些任务。如果应用程序使用多个嵌套/内部类(可能是由于设计不佳),这可能会导致性能稍慢
    • 工具/IDE的支持有限-嵌套类不能享受与大多数工具和IDE中的顶级类相同的支持。这有时可能会激怒开发人员
    我强烈支持选项(1)。其思想是,类
    B
    仅由类
    A
    和选项(1)所需是唯一清楚表达该意图的替代方案:类
    B
    是类
    A
    的一部分。您可以在A中使用静态嵌套类。更好的封装是因为嵌套类是对仅在一个位置使用的类进行逻辑分组的一种方式。你的助手类仅仅包含字段吗?

    也,让我们考虑B相当小。很明显,一个真正的大类应该得到它自己的源文件,不管它是如何使用的。@每个人…选项B的B类真的是私有的吗?我认为它们只有默认作用域(可以被包中的其他类使用)。@SJuan76 ya,只有默认作用域。@SJuan76,@aps:yes,you's right:=)因此,第二个选项确实有缺陷。不幸的是,没有。本文只描述了静态嵌套类是什么,但是没有给出任何关于在所描述的情况下应该使用什么的见解。我不理解您所说的“您可以在B中使用静态嵌套类”是什么意思。你是说“在一个范围内”吗?关于helper类。实际上,B只是扩展了抽象类并实现了它的一个方法(尽管实现相当简单)。然后A调用B,而A不能直接扩展那个abstract类,那个里需要封装。最好保持嵌套类的简单。如果这个类很简单,并且只在一个地方使用,那么就让它成为一个嵌套的类。是的,它似乎是除了从类a强制执行任何访问之外的唯一选项。
    // A.java
    public class A {
        ...            
    }
    
    // B.java
    class B { 
        ... 
    }