【问题标题】:How to create a class with a package private constructor?如何使用包私有构造函数创建一个类?
【发布时间】:2013-08-16 02:12:30
【问题描述】:

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

示例

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 字段,我通过我的库中的反射设置了该字段。这完美地工作,但我不禁认为必须有更好的解决方案。也许在我的情况下一个有用的限制是它只需要可以从另一个类构造这个对象。

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

【问题讨论】:

  • 请添加一些示例代码。
  • @user902383 这如何解决问题?它仍然是对用户公开的工厂方法。
  • @Overv 对不起,我误解了你,你想创建你的对象,并给他们使用,但你想阻止用户创建给定类型的对象?听起来像枚举
  • 单例设计模式?

标签: java oop constructor


【解决方案1】:

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

具体回答标题中的问题:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 2020-10-21
    • 2013-08-28
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 2021-09-19
    相关资源
    最近更新 更多