【问题标题】:How to make objects of an enum in java如何在java中制作枚举对象
【发布时间】:2015-04-10 18:32:57
【问题描述】:

我正在尝试定义三个不同的枚举类“项目”对象,其权重在 0 到 20 之间以及每个项目的描述

这是我的代码:

public enum Item
{
    // Three Items with descriptions
    GOLD (2, "gold"), SILVER(12, "silver"), BRONZE(5, "bronze");

    private int weight;
    private String description;

    public int getWeight()
    {
       return weight;
    }

    public String toString()
    {
        return description;
    }

}

我一直收到这个错误

枚举项中的构造函数项不能应用于给定类型:必需:无参数,找到:int.java.lang.String,原因:实际参数列表和正式参数列表的长度不同

还有

您在此处使用的运算符不能用于您使用它的值的类型。你要么在这里使用了错误的类型,要么是错误的操作符

【问题讨论】:

标签: java


【解决方案1】:

你忘记声明构造函数了!

public enum Item {

  GOLD(2, "gold"), SILVER(12, "silver"), BRONZE(5, "bronze");     

  private int weight;
  private String description;

  private Item(int weight, String description) {
    this.weight = weight ;
    this.description = description ;
  }

  // rest of code

}

长话短说
在你的代码中GOLD(2, "gold") 可以读作GOLD = new Item(2, "gold"),所以编译器找不到合适的构造函数。

更完整的答案和示例
不要忘记所有东西(嗯,几乎所有东西,有一些像intboolean 这样的原语)都是Java 中的对象。因此,enum 的项目也是对象,需要使用构造函数进行实例化。
请记住,如果您不提供显式构造函数,则存在隐式无参数构造函数。

public enum Test {
  A, B, C;
}

public enum Test2 {
  A, B, C;

  private int value ;

  private Test2(){
    value = 0;
  }
}

public enum Test3 {
  A(1), B(2), C(3);
}

public enum Test4 {
  A, B, C;

  public Test4(int value) {}
}

TestTest2 是有效的,因为有一个无参数的构造函数(对于 Test 是隐式的)。但是Test3Test4 尝试使用不存在的构造函数来实例化ABC

【讨论】:

  • 这可能看起来像一个愚蠢的问题,但我是使用枚举类的初学者,所以请原谅我,为什么我需要构造函数?
  • 你需要指出哪些参数进入了哪些变量。
  • @tb1000 我更新了我的答案,如果还有什么不清楚的,请不要犹豫:)
【解决方案2】:

你需要定义一个合适的构造函数:

private Item(int weight, String description) {
    this.weight = weight;
    this.description = description;
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2010-09-10
    相关资源
    最近更新 更多