2013-02-15 46 views
2

首先,很抱歉,我的英語...爲什麼我不能用簡短的構造函數參數聲明Enum類型?

我正在做一個枚舉類型,但我不能這樣做,因爲我使用tipo(String nombre, short valor)

爲什麼我必須用tipo(String nombre, int valor)?使用int而不是

public enum Tipo { 

    // The constructor (String, int) is undefined 
    DAT ("DAT", -2); 



    private String nombre; 
    private short valor; 

    tipo(String nombre, short valor){ 
     this.nombre = nombre; 
     this.valor = valor; 
    } 

    public String getNombre() { 
     return nombre; 
    } 

    public void setNombre(String nombre) { 
     this.nombre = nombre; 
    } 

    public short getValor() { 
     return valor; 
    } 

    public void setValor(short valor) { 
     this.valor = valor; 
    } 
} 
+1

的可能重複[爪哇 - 短期和鑄造(http://stackoverflow.com/questions/2720738/java-short - 鑄造) – Puce 2013-02-15 12:15:06

回答

5

嘗試DAT ("DAT", (short)-2);

你傳遞一個int到一個構造函數一個short。由於潛在的數據丟失,Java不會從intshort自動投射。

一個很好的這樣的解釋可以發現here - primitive type short casting in java

+0

但是對於文字,這隻適用於方法參數。例如。變量初始化工作正常。 – Puce 2013-02-15 12:18:17

+0

我已閱讀完畢。我完全理解。總結如下: 默認情況下運行Java int。如果你的數據操作失敗,Java會迫使你手動完成。謝謝!! – Marquake 2013-02-15 12:46:56

5

有兩個變化,你需要對上述:

1)修正了你的領域錯字「勇氣」是小寫

private short valor; 

2)鑄造整型到短:

DAT ("DAT", (short)-2); 

此外,您還應該將枚舉類型重命名爲'Tipo',這是推薦的枚舉命名格式。

+0

完成! (短)還沒有。 – Marquake 2013-02-15 12:29:04

1

默認情況下,一個原始數字將被視爲一個整數,並且從一個整數到一個短整數都需要一次轉換。編譯器不會自動執行這種類型的轉換 - 這是因爲從一個較大的(一個int)到一個較小的(一個short)會導致丟失數據的風險(通過截斷數字),因此編譯器會迫使您進行轉換。

所以,你有兩個選擇:

DAT("DAT", (short)-1); 

private short valor; 
Tipo(String nombre, int valor){ 
    this.valor= (short)valor; 
+0

謝謝你的好解釋! – Marquake 2013-02-15 12:30:47

相關問題