我知道在线上有很多东西,而且我一直在找两个小时来尝试修复我的代码。
我正在上一门不变的课,叫做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;}
}
答案 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;}
}