朋友包模式问题

Friend Package Pattern problems

我遇到了这里描述的朋友包模式: http://wiki.apidesign.org/wiki/APIDesignPatterns:FriendPackages

我简单地实现了这个例子,但它对我不起作用。我总是得到错误

IllegalStateException: Something is wrong: null

访问器 class 中抛出错误。

该示例说明创建新对象是通过调用

Item item = Accessor.getDefault().newItem();

但是既不会调用Accessor.setDefault(Accessor),也不会调用静态初始化块。

static {
    Accessor.setDefault(new AccessorImpl());
}

这应该如何工作?

终于成功了。如果您打开示例中的 class 文件,您会看到访问器 class 包含示例中未提及的代码。如果您插入此代码,它将起作用。

private static final Class<?> INIT_API_CLASS = loadClass(
        Item.class.getName()
);

private static Class<?> loadClass(String name) {
    try {
        return Class.forName(name, true, Accessor.class.getClassLoader()
        );
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
}