tangguo

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

java

我继承了包含静态嵌套类的代码,如下所示:

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) {
// ...
        }
    }
}

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

 public class Foo {

    // Foo fields and functions
    // ...
}

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

    public SGroup(int id, String type) {
// ...
    }
}

如果这是正确的,那么维护静态嵌套类结构是否有任何优势,还是应该重构?


阅读 260

收藏
2020-11-20

共2个答案

小编典典

Jorn陈述是正确的,通常按照以下经验法则来体现:

嵌套类应设为私有,这意味着保留托管类的辅助逻辑,仅此而已。如果您不能将它们设为私有,则可能不应嵌套。

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

2020-11-20
小编典典

这取决于类的用途。例如,如果它与外部类耦合,就像Map.Entry一样,则将其保留。但是,如果使用不带封闭类型的类是有意义的,则也可以将其提升为顶级类。

2020-11-20