良好的编程风格,两个类使用彼此的内部类

时间:2011-05-20 13:29:18

标签: java coding-style inner-classes

我有A类,其内部类定义为A1,B类内部类定义为B1。你认为它的实现中的A类是指B1,B类是指A1是否正常。这不是一个糟糕的编程风格吗?它只是A1非常特定的类和B1非常B特定,这就是我耦合它们的原因。将A1和B1作为单独的类可以保留它或者更好吗?你怎么看? THX。

5 个答案:

答案 0 :(得分:6)

你可以 - 尽管我认为内部类的意义在于它们应该在外部类中使用。换句话说,我不是公共内部阶级的忠实粉丝。

我实际上只是把A1和B1作为它自己的类 - 在我看来A1和B1毕竟不是特定于A和B,因为B使用A1而A使用B1。

查看此帖Why/when should you use nested classes “当您要嵌套的类仅对封闭类有用时使用嵌套类”

答案 1 :(得分:6)

我相信如果你需要在你的一个类中引用另一个类的内部类,那是因为可能包含内部类的类应该提供一些方法来避免这个问题。

如果问题不是那样,那么内部类可能足够通用,可以在其他类中使用,因此应该是一个独立的类,它应该是指定其上下文的同一个包的一部分申请/使用。

答案 2 :(得分:2)

我可能尝试两件事:

  1. 将内部类移动到单独的类中,因为它们不再是内部的逻辑方式。

  2. 创建一些接口,使A和B至少不知道A1和B1类的位置。

答案 3 :(得分:1)

我会说两个类都在同一个包中,提取内部类并使它们成为私有包。这样,类(A和B)都可以引用它们,但它们仍然对包外的其他类是不可见的。

答案 4 :(得分:1)

我认为你在一个问题中提出了两个独立的设计问题。第一个问题是关于引用另一个类的内部类。第二个问题是关于A / A1和B / B1之间的循环依赖性。

暴露的内部课程

使用 Java 内部类的原因有很多。

  1. 仅与彼此和外部类相关的组类。 (a.k.a迷你包)
  2. 在传递和引用外部类实例时减少样板代码
  3. 在包
  4. 之外添加其他级别的范围
  5. 扩展Java访问范围的语义......例如,private对外层 - 内部类交互有不同的含义。
  6. 减少源文件的爆炸......特别是在(源)代码生成场景中。
  7. 访问外部类内部以进行测试(在JAR打包期间可以删除内部类。)
  8. 在许多这种情况下,通过名称引用内部类是完全合理的。

    循环依赖

    这通常是需要提取接口或需要提取其他专用类的告诉标志。 如果 A1,B1过于简单而无法提取接口等,那么也许您可以以不同的方式使用内部类:具有外部类C,包含A1,B1。