【发布时间】:2014-04-15 13:51:17
【问题描述】:
我有一种情况,我无法更改一组类的主要API,但我需要从归档数据中构造一个新实例,包括设置大量私有字段。
到目前为止,我的想法是创建一个静态工厂方法,该方法将从档案中生成我的实例,如下所示:
版本 1:
public class Item {
private Long id;
public static Item fromArchived(final ArchivedItem archived) {
return new Item(){{
this.id = archived.getId();
}};
}
}
IntelliJ IDEA 没有给我任何红线,直到我运行我的 maven 构建,我才知道有问题:
error: id has private access in Item
相比之下,这是可行的:
版本 2:
public class Item {
private Long id;
public static Item fromArchived(final ArchivedItem archived) {
Item item = new Item(){{
// this.id = archived.getId();
}};
item.id = archived.getId();
return item;
}
}
我一直在审查我的coreJavaknowledge,关于版本 1 为何不起作用的唯一模糊猜测是实例初始化程序(双括号初始化)以某种方式出现在静态上下文,这也没有任何意义。想法?
编辑
我认为问题的最初形式是模糊的。我正在寻找的答案解释了为什么我在静态方法的主体中可以看到父级的私有 id 字段,但在同一内部匿名子类的实例初始化程序的主体中却无法看到它静态方法。
【问题讨论】:
标签: java inner-classes