如何使用包私有构造函数创建类?

时间:2013-08-14 08:13:16

标签: java oop constructor

我正在创建一个库,我想返回一个表示真实世界对象的对象。我想向开发人员公开这个类来操纵现实世界的对象,但我不想让他们自己构造这些对象。

示例

public class World {
    public static List<RealObject> getAllObjects() {
        // How to create RealObject with physicalID?
    }
}

public class RealObject {
    private int physicalID;

    public RealObject(int physicalID) {
        // Undesirable, user has no knowledge of IDs
    }

    public void setState(int state) {
        // Code using physicalID to change state
    }
}

这些对象目前没有构造函数,并且具有我在库中使用反射设置的私有id字段。这很有效,但我不禁认为必须有更好的解决方案。在我的情况下,也许一个有用的约束是它只需要可以从另一个类构造这个对象。

有更好的解决方案吗?在这种情况下,为了组织目的,是否仍然可以将该类放在单独的文件中?

1 个答案:

答案 0 :(得分:5)

如果在构造函数(或任何其他方法)上放置默认访问级别,则只能由同一包中的类访问。

具体回答标题中的问题:

public class RealObject {
  RealObject(int physicalID) {
    // Package-private constructor
  }
}