2013-02-15 48 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

相关问题