繁体   English   中英

为什么我不能用简短的构造函数参数声明枚举类型?

[英]Why I can't declare Enum Type with short constructor argument?

首先,对不起我的英语......

我正在做一个Enum类型,但我做不到,因为我正在使用tipo(String nombre, short valor)

为什么我必须使用tipo(String nombre, int valor) 使用int而不是short

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;
    }
}

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

您正在将一个int传递给一个short的构造函数。 由于可能会丢失数据,Java不会从int自动转换为short

这里可以找到一个非常好的解释- 在java中的原始类型短流程

您需要对上述内容进行两项更改:

1)修正字段'Valor'的拼写错误为小写

private short valor;

2)将int转换为short:

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

此外,您还应将枚举类型重命名为“Tipo”,这是枚举的推荐命名格式。

默认情况下,原始数字将被视为整数,从整数变为短整数需要强制转换。 编译器不会自动执行这种类型的转换 - 这是因为从较大的(int)到较小的(short)引入了丢失数据的风险(通过截断数字),因此编译器会强制您进行转换。

所以你有两个选择:

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

要么

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM