朋友包模式问题
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);
}
}
我遇到了这里描述的朋友包模式: 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);
}
}