【问题标题】:Why the constructor is default while creating singleton? [duplicate]为什么在创建单例时构造函数是默认的? [复制]
【发布时间】:2019-11-06 13:22:22
【问题描述】:

为什么这个方法使用了默认构造函数?

public static TicketCounterSingle getInstance() {
    if (instance == null) {
        instance = new TicketCounterSingle();
    }
    return instance;
}

这是完整的课程:

public class TicketCounterSingle {
    private static TicketCounterSingle instance;

    String Name;
    int avail;

    private TicketCounterSingle(String Name, int avail) {
        this.avail = avail;
        this.Name = Name;
    }

    public String getName() {
        return Name;
    }

    public synchronized boolean bookTicket(int ticket) {
        if (avail >= ticket) {
            avail = avail - ticket;
            return true;
        } else {
            return false;
        }
    }

    public static TicketCounterSingle getInstance() {
        if (instance == null) {
            instance = new TicketCounterSingle();
        }
        return instance;
    }
}

【问题讨论】:

  • 也许只有一个默认构造函数?您能否向我们展示整个班级详细解释您无法理解的内容,好吗?谢谢...

标签: java constructor singleton


【解决方案1】:

您的代码将无法编译,因为没有默认构造函数。

TicketCounterSingle() {}

在你的课堂上。

有一个参数化的:

private TicketCounterSingle(String Name, int avail) {
    this.avail = avail;
    this.Name = Name;
}

这意味着不会自动提供默认构造函数,您要么必须提供默认构造函数,要么在参数化getInstance(String name, int avail) 方法中调用参数化构造函数:

public static TicketCounterSingle getInstance(String name, int avail) {
    if (instance == null) {
        instance = new TicketCounterSingle(String name, int avail);
    }
    return instance;
}

【讨论】:

  • 构造函数TicketCounterSingle()是未定义的编译错误
  • @Nisha 这正是我试图回答的......要么定义一个,要么使用一个有参数的。
猜你喜欢
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多