尝试创建Singleton

时间:2019-11-06 23:49:48

标签: java singleton

我知道在线上有很多东西,而且我一直在找两个小时来尝试修复我的代码。

我正在上一门不变的课,叫做Car,我看了很多视频并在线阅读了文章。

即使是我大学时期的笔记,也谈到在上课Immutable时要创建一个Singleton课堂(我的笔记像往常一样是垃圾)。

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

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()中未定义错误。

编辑: 这是我得到的实际问题

问题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;}
}

2 个答案:

答案 0 :(得分:1)

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

carSingleton = new Car();

定义默认的构造函数以修复错误:

private Car() {
    // initialize final variables
}

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

回答EDIT部分:

如果类型(类)是不可变的,则仅表示一旦创建它们便无法更改其实例。分配中唯一需要做的就是删除所有 set 方法,并使所有类属性为final

就像你说的那样,你的笔记根本对你没有帮助。不应将Singleton用于此目的。

答案 1 :(得分:1)

要使此类不变,请删除设置器。它不应该是Singleton。

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;}
}