Groovy枚举构造函数匹配

时间:2017-09-16 10:47:55

标签: groovy enums constructor

我有以下Groovy枚举:

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

    private int rank

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

    int getRank() {
        rank
    }
}

我还有一个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
  }
}

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

GardenGenerator gg = new GardenGenerator(Flower.Daisy, 5, 10, true)

我在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)

我需要做些什么来Flower解决此问题?

1 个答案:

答案 0 :(得分:4)

您的Flower枚举应按以下方式实施:

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

    private int rank

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

    int getRank() {
        rank
    }
}

在枚举构造函数中无需super()调用。