我应该将Java中的静态嵌套类重构为单独的类吗?

pet*_*ust 2 java static nested class

我继承了包含静态嵌套类的代码:

public class Foo {

// Foo fields and functions
// ...
    private static class SGroup {
        private static Map<Integer, SGroup> idMap = new HashMap<Integer, SGroup>();

        public SGroup(int id, String type) {
// ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从阅读SO(例如Java内部类和静态嵌套类),我相信这相当于两个单独文件中的两个单独的类:

 public class Foo {

    // Foo fields and functions
    // ...
}
Run Code Online (Sandbox Code Playgroud)

public class SGroup {
    static Map<Integer, SGroup> idMap = new HashMap<Integer, SGroup>();

    public SGroup(int id, String type) {
// ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这是正确的,维护静态嵌套类结构有什么好处,还是应该重构?

Jor*_*orn 8

这取决于课程的用途.如果它耦合到外部类,例如,就像Map.Entry一样,只需将其保留.但是,如果使用没有封闭类型的类是有意义的,那么您也可以将它提升为顶级类.


Vit*_*liy 5

Jorn声明是正确的,它通常表现为以下经验法则:

嵌套类应该是私有的,意味着托管类的保持辅助逻辑,仅此而已.如果你不能让它们私有 - 它们可能不应该嵌套.

例外情况是,当您定义嵌套类以允许轻松访问托管类的状态时,在这种情况下,您应该考虑简单地合并两个类以增加内聚.