我正在嘗試完成一個項目,儘管我已經嘗試過了,但我似乎無法做到這一點。這裏的枚舉:如何在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++會)。但我認爲調用一個將其自己的類的實例作爲「複製構造函數」的構造函數仍然是常見做法。 –