我有一个大致像这样的类结构:

final public class Util {
    private Util() {
        throw new AssertionError(); // there is not supposed to exist an instance
    }

    public static DataElem getData() {
        return new Util().new DataElem();
    }

    public class DataElem {
        // class definition
    }
}

正确生成内部类实例的代码来自this线程。但是我不喜欢每次创建一个内部类实例时,首先创建一个外部类实例。而且由于我将AssertionError放入其构造函数中,因此它不起作用。

我是否必须随身携带一个虚拟实例来从内部类创建实例?我不能像Util.DataElem一样工作吗?

最佳答案

您可以将内部类设为静态

final public class Util {
    private Util() {
        throw new AssertionError(); // there is not supposed to exist an instance
    }

    public static DataElem getData() {
        return  new Util.DataElem();
    }

    private static class DataElem {
        private DataElem(){} // keep private if you just want elements to be created via Factory method
        // class definition
    }
}

然后像这样初始化
new Util.DataElem();

10-04 23:30