我正在尝试完成一个项目,尽管我已经尝试过了,但我似乎无法做到这一点。这里的枚举:如何在Java中使用枚举拷贝构造函数?
public enum Symbols {
/**
* The Seven
*/
SEVEN(12,"images/seven.jpg"),
/**
* The Watermelon
*/
WATERMELON(10,"images/watermelon.jpg"),
/**
* The Orange
*/
ORANGE(8,"images/orange.jpg"),
/**
* The Plum
*/
PLUM(6,"images/plum.jpg"),
/**
* The Lemon
*/
LEMON(4,"images/lemon.jpg"),
/**
* The Cherry
*/
CHERRY(2,"images/cherry.jpg");
private int payout; // Symbol payout value
private BufferedImage image; // Symbol image
private String icon; // Symbol file name
/** Constructor - Payout must be positive and even, file name must not be null
* @param payout - Symbol payout amount
* @param icon - Symbol image file name
*/
Symbols(int payout, String icon){
this.payout = payout;
this.icon = icon;
loadImage(icon);
}
/** Copy Constructor - Symbol must not be null
* @param s - A single symbol
*/
Symbols(Symbols s){
payout = s.payout;
icon = s.icon;
loadImage(icon);
}
现在我可以进入主并创建一个名为“S”这样的符号:
Symbols s = Symbols.CHERRY;
但我有麻烦的“S”副本使用复制构造函数给出:
Symbols t = Symbols(s);
如果我试图做到这一点,我得到的错误:“该方法符号(符号)是未定义的类型符号。
谢谢
那么如果你定义了它们(他完成了),那么就有复制构造函数。 –
@MarkPeters,但编译器不会*使用*它们,除非你自己调用它们。例如,他给出的代码不会编译,如果他写了't = s;'编译器不会自动调用复制构造函数。我不称之为复制构造函数。只是一个构造函数。 – EJP
你是对的,它不是一个复制构造函数,因为有隐式调用它的语法(就像我认为C++会)。但我认为调用一个将其自己的类的实例作为“复制构造函数”的构造函数仍然是常见做法。 –