【问题标题】:I am getting a getInstance() error occurs when trying to create a Singleton尝试创建单例时出现 getInstance() 错误
【发布时间】:2019-11-06 23:49:48
【问题描述】:

我知道网上有很多东西,过去两个小时我一直在寻找试图修复我的代码。

我正在制作一个名为 Car 的不可变类,我在网上看过很多视频和阅读文章。

就连我在大学时的笔记也谈到了在上课时创建一个 Singleton 课程Immutable(我的笔记和往常一样是垃圾)。

无论如何,下面的代码包含了我在视频中看到和在文章中阅读的所有内容,唯一的区别是我观看和阅读的所有内容是它们的对象没有其他变量。

public final class Car{
    private static Car carSingleton = null;
    private final String owner;
    private final String reg;
    private final String make;
    private final int kilometres;
    private final double price;



    private Car() {}    


    public static Car getInstance()() {
        if(carSingleton == null) {
            carSingleton = new Car();
        }   
        return carSingleton;
    }



    public String getOwner(){return owner;}
    public String getReg(){return reg;}
    public String getMake(){return make;}
    public int getKilometres(){return kilometres;}
    public double getPrice(){return price;}



}

我在 getInstance() 构造函数中遇到错误 Car() is undefined.

编辑: 这是给我的实际问题

问题 1 下面给出的是一个可变的 Car 类。重写它,让它变得不可变,并编写一个简单的测试程序。

class Car{
    private String owner;
    private String reg;
    private String make;
    private int kilometres;
    private double price;
    public Car(String owner, String reg, String make, int kilometres, double price){
            this.owner = owner; this.reg = reg;this.make = make; 
            this.kilometres = kilometres; this.price = price; 
    }
    public String owner(){return owner;}
    public String reg(){return reg;}
    public String make(){return make;}
    public intkilometres(){return kilometres;}
    public double price(){return price;}
    public void setPrice(double p){price = p;}
    public void setOwner(String ow){owner = ow;}
    public void setKil(int k){kilometres = k;}
    public void setMake(String m){make = m;}
}

【问题讨论】:

  • getInstancen() 返回的 Car 实例应该有什么“所有者”?什么“价格”?简而言之,对这样的类使用单例是没有意义的。
  • 你得到那个异常是因为没有零参数构造函数。这必须在编译期间发生?其他值得注意的事情,getInstancen() 如果您在意,可能会稍微拼写错误。 car 的构造函数,如果是单例,则应该是私有的。要解决此问题,请调用 Car 构造函数并传入一些值,它应该可以正常工作(ish)。
  • 这能回答你的问题吗? Java Constructor undefined?
  • 那么为什么它们是最终的?为什么只有一辆车?

标签: java singleton


【解决方案1】:

要使此类不可变,请删除 setter。它不应该是单例。

class Car{
    private String owner;
    private String reg;
    private String make;
    private int kilometres;
    private double price;
    public Car(String owner, String reg, String make, int kilometres, double price){
            this.owner = owner; this.reg = reg;this.make = make; 
            this.kilometres = kilometres; this.price = price; 
    }
    public String getOwner(){return owner;}
    public String getReg(){return reg;}
    public String getMake(){return make;}
    public getKilometres(){return kilometres;}
    public double getPrice(){return price;}
}

【讨论】:

    【解决方案2】:

    在您的getInstance() 中,您正在调用未定义的构造函数:

    carSingleton = new Car();
    

    定义一个默认构造函数来修复错误:

    private Car() {
        // initialize final variables
    }
    

    或在 getInstance() 中使用其他构造函数

    回答编辑部分:

    如果一个类型(类)是不可变的,它只意味着一旦你创建了它们就不能改变它的实例。您在作业中唯一需要做的就是删除所有 set 方法,并将所有类属性设为 final

    就像你说的,你的笔记对你一点帮助都没有。单例不应用于此目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      相关资源
      最近更新 更多