我有A类,其内部类定义为A1,B类内部类定义为B1。你认为它的实现中的A类是指B1,B类是指A1是否正常。这不是一个糟糕的编程风格吗?它只是A1非常特定的类和B1非常B特定,这就是我耦合它们的原因。将A1和B1作为单独的类可以保留它或者更好吗?你怎么看? THX。
答案 0 :(得分:6)
你可以 - 尽管我认为内部类的意义在于它们应该在外部类中使用。换句话说,我不是公共内部阶级的忠实粉丝。
我实际上只是把A1和B1作为它自己的类 - 在我看来A1和B1毕竟不是特定于A和B,因为B使用A1而A使用B1。
查看此帖Why/when should you use nested classes “当您要嵌套的类仅对封闭类有用时使用嵌套类”
答案 1 :(得分:6)
我相信如果你需要在你的一个类中引用另一个类的内部类,那是因为可能包含内部类的类应该提供一些方法来避免这个问题。
如果问题不是那样,那么内部类可能足够通用,可以在其他类中使用,因此应该是一个独立的类,它应该是指定其上下文的同一个包的一部分申请/使用。
答案 2 :(得分:2)
我可能尝试两件事:
将内部类移动到单独的类中,因为它们不再是内部的逻辑方式。
创建一些接口,使A和B至少不知道A1和B1类的位置。
答案 3 :(得分:1)
我会说两个类都在同一个包中,提取内部类并使它们成为私有包。这样,类(A和B)都可以引用它们,但它们仍然对包外的其他类是不可见的。
答案 4 :(得分:1)
我认为你在一个问题中提出了两个独立的设计问题。第一个问题是关于引用另一个类的内部类。第二个问题是关于A / A1和B / B1之间的循环依赖性。
暴露的内部课程
使用 Java 内部类的原因有很多。
private
对外层 - 内部类交互有不同的含义。在许多这种情况下,通过名称引用内部类是完全合理的。
循环依赖
这通常是需要提取接口或需要提取其他专用类的告诉标志。 如果 A1,B1过于简单而无法提取接口等,那么也许您可以以不同的方式使用内部类:具有外部类C,包含A1,B1。