【问题标题】:How to avoid creating object of classA in ClassB [duplicate]如何避免在 A 类中创建类对象 [重复]
【发布时间】:2017-10-24 13:29:37
【问题描述】:

我在一次采访中遇到了一个问题:

假设我有一个 classA,我应该只在 classA 中创建 classA 的对象,而不是在任何其他类中,例如:

classA{
// some instructions

ClassA a = new ClassA();
}

ClassB{
//Some instructions

ClassA a1 = new ClassA(); // Here I should throw a compilation or runtime error.
}

我告诉通过添加私有构造函数,但他告诉我们应该有能力在同一个类中创建多个对象。我可以做这个吗?

【问题讨论】:

  • 将构造函数设为私有。
  • 请注意,编译错误非常优于运行时错误。
  • 我也是这么说的,但面试官说,我们应该有能力在同一个类中创建多个对象。
  • @user8579908 那么你的面试官不知道他在说什么。将构造函数设为私有与可以创建的实例数量无关。
  • @user8579908 “我说​​过要通过添加私有构造函数将类作为单例类” 嗯,这就是混乱的根源:在这里引入了单例这个词;虽然私有构造函数对于(非枚举)单例来说是必需的,但它们用于其他情况。

标签: java


【解决方案1】:

使其构造函数private:

private classA() {}

这禁止在其他任何地方调用它。
例如私有构造函数用于Utility classesStatic factory
更新:@Arkadiy 注意到它不会限制您可以创建的实例数量。

【讨论】:

  • 我也是这么说的,但面试官说,我们应该有能力在同一个类中创建多个对象。
  • 所以请正确编辑您的问题。
  • 私有构造函数不排除多个实例。面试官将私有构造函数与单例模式混为一谈。私有构造函数用于实现单例模式,但可以在其他情况下使用。
  • 可能是面试官要求的静态工厂模式?这几乎只允许在类内部创建对象,但它也允许从外部访问执行任务的方法。我猜对于初级程序员来说这不是最简单的问题。
  • @Vlasec 我想我们不应该猜测面试官说了什么,因为 OP 更可能误解了他。
【解决方案2】:

您可以通过对类的构造函数使用私有访问修饰符来实现它,

private 访问修饰符只允许私有的东西在它自己的类中访问。

以下是访问修饰符及其访问范围的表格

【讨论】:

  • 此代码不相关。
  • @AndyTurner 我编辑了帖子
【解决方案3】:
  1. 将构造函数设为私有
  2. 遵循工厂方法或工厂模式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2012-09-02
    • 2015-10-19
    相关资源
    最近更新 更多