Groovy 枚举构造函数匹配

sme*_*eeb 3 groovy enums constructor

我有以下 Groovy 枚举:

enum Flower {
    Tulip(1),
    Daisy(2)

    private int rank

    Flower(int rank) {
        super()
        this.rank = rank
    }

    int getRank() {
        rank
    }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个GardernGenerator类,它将Flower实例作为其构造函数参数之一:

class GardenGenerator {
  Flower flower
  int length
  int width
  boolean isOrganic

  GardenGenerator(Flower flower, int length, int width, boolean isOrganic) {
    super()

    this.flower = flower
    this.length = length
    this.width = width
    this.isOrganic =isOrganic
  }

  Garden createGarden() {
    // ...blah whatever
  }
}
Run Code Online (Sandbox Code Playgroud)

GardenGenerator当我尝试像这样创建这个实例时:

GardenGenerator gg = new GardenGenerator(Flower.Daisy, 5, 10, true)
Run Code Online (Sandbox Code Playgroud)

Flower枚举上遇到了与构造函数相关的问题:

Caused by: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: com.me.myapp.Flower(java.lang.String, java.lang.Integer, java.lang.Integer)
Run Code Online (Sandbox Code Playgroud)

我需要做什么来Flower解决这个问题?

Opa*_*pal 5

您的Flower枚举应按如下方式实现:

enum Flower {
    Tulip(1),
    Daisy(2)

    private int rank

    Flower(int rank) {
        this.rank = rank
    }

    int getRank() {
        rank
    }
}
Run Code Online (Sandbox Code Playgroud)

不需要super()在枚举的构造函数中进行调用。