【问题标题】:Why I can't declare Enum Type with short constructor argument?为什么我不能用短构造函数参数声明枚举类型?
【发布时间】:2013-02-15 12:04:37
【问题描述】:

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

我在做 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;
    }
}

【问题讨论】:

标签: java constructor enums


【解决方案1】:

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

您将int 传递给采用short 的构造函数。 Java 不会从 int 自动转换为 short,因为可能会丢失数据。

可以在here - primitive type short casting in java找到一个很好的解释

【讨论】:

  • 但对于文字,这仅适用于方法参数。例如。变量初始化工作正常。
  • 我已经看完了。我完全理解。总结说:默认运行Java int。如果您丢失了使用 short 操作的数据,java 会强制您手动操作。谢谢!!
【解决方案2】:

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

1) 将字段“Valor”的拼写错误修正为小写

private short valor;

2) 将 int 转换为 short:

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

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

【讨论】:

    【解决方案3】:

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

    所以你有两个选择:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多