2011-06-30 62 views
3

比方说,我有一个Java类A,它需要一个帮助类B。该辅助类仅用于A,没有其他用途。另外,B不需要以任何方式使用A(不要调用方法或访问字段)。去哪里非公开课?

那么,问题是:放哪里B

主要有以下几种选择:

  1. 静态嵌套类。在我看来,它只是让代码更清晰(更多缩进等)。在相同的源

    public class A { 
        ... 
        private static class B { ... } 
    } 
    
  2. 非公共类。我喜欢这个选项。

  3. 非公开课在单独的来源。虽然这看起来像这个选项有一点花销。

    // A.java 
    public class A { 
        ...    
    } 
    
    // B.java 
    class B { 
        ... 
    } 
    

就目前而言,我更喜欢第二个选项。你对此有什么想法?最佳做法是什么? 有没有关于它的权威来源?

+1

此外,让我们考虑** **乙是相当小的 - 这是很清楚,一个真正的大班级应该得到它自己的源文件,不管它是如何使用的。 – Andy

+0

@Everyone ... B级选项B真的很私密吗?我认为他们只有默认范围(可以被其他类的包使用)。 – SJuan76

+0

@ SJuan76雅,只是默认范围。 – aps

回答

5

我强烈地为选项(1)投票。这个想法是,类B只有类A需要,选项(1)是明确表示该意图的唯一选择:类B是类A的一部分。

+0

是的,它似乎是除了从类** A **之外强制禁止访问的唯一选项。 – Andy

1

it对您有帮助吗?

有没有严重的缺点,但有一定可以找出至少几个包括:

  • 难以理解 - 尤其是对非经验的程序员,谁可能很难代码,增强和维护。
  • 更多的类 - 它肯定会增加应用程序使用的类的总数。对于加载到内存中的每个类,JVM都会为其创建一个Class类型的对象。可能还有其他一些例程任务,可能需要JVM为所有额外的类执行任务。如果应用程序使用多个嵌套/内部类(这可能是由于糟糕的设计),这可能会导致性能稍微降低。
  • 由Tools/IDE提供的有限支持 - 嵌套类不享受与顶级类在大多数工具和IDE中获得的支持相同的支持。有时这可能会刺激开发者。
+0

不幸的是,没有。本文仅介绍静态嵌套类,但没有提供任何关于在所描述的情况下应该使用什么内容的见解。 – Andy

1

您可以在A.Better封装中使用静态嵌套类,因为嵌套类是一种逻辑分组仅用于一个地方的类的方法。你的助手类是否只包含字段?

+0

我不明白你的意思是“你可以在B中使用静态嵌套类”。你的意思是“在A内”吗? – Andy

+0

oh ya,sorry.i意思是A. – aps

+0

关于助手类。实际上,** B **只是扩展了抽象类并实现了它的一个方法(尽管实现相当简单)。然后** A **电话** B **。 – Andy