为什么构造函数未定义?

0 java enums bukkit enum-class

即使我正在使用Bukkit,这也是一个Java问题;

我不知道,为什么Java说构造函数是未定义的,因为它是定义的

import org.bukkit.entity.EntityType;
import net.minecraft.server.v1_10_R1.EntityCow;
import net.minecraft.server.v1_10_R1.EntityInsentient;

public enum Pets
{
    COW("Cow", 92, EntityType.COW, EntityCow.class, Pets.class);

    private String name;
    private int id;
    private EntityType et;
    private Class<? extends EntityInsentient> nmsClass;
    private Class<? extends EntityInsentient> customClass;

    Pets(String name, int id, EntityType et, Class<? extends EntityInsentient> nmsClass, Class<? extends EntityInsentient> customClass)
    {
        this.name = name;
        this.id = id;
        this.et = et;
        this.nmsClass = nmsClass;
        this.customClass = customClass;
    }

    public String getName()
    {
        return name;
    }
    public int getID()
    {
        return id;
    }
    public EntityType getET()
    {
        return et;
    }
    public Class<? extends EntityInsentient> getNMSClass()
    {
        return nmsClass;
    }
    public Class<? extends EntityInsentient> getCustomClass()
    {
        return customClass;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题,因为我环顾四周,除了这种语法之外什么都没找到,似乎所有关于这类主题的对话都至少有5年之久且非常含糊.

Jes*_*per 5

枚举的构造函数Pets需要5个参数:

 Pets(String name, int id, EntityType et,
      Class<? extends EntityInsentient> nmsClass,
      Class<? extends EntityInsentient> customClass)
Run Code Online (Sandbox Code Playgroud)

当您声明常量时,COW您正在使用此构造函数:

COW("Cow", 92, EntityType.COW, EntityCow.class, Pets.class);
Run Code Online (Sandbox Code Playgroud)

请注意,第5个参数Pets.class不符合构造函数的期望,因为枚举Pets不会扩展或实现EntityInsentient.

有几种方法可以解决这个问题,但是你应该使用哪种方法取决于你的程序的其余部分以及你想要实现的目标:

  • 您可以更改构造函数和字段customClass,删除绑定extends EntityInsentient.

  • 你可以制作枚举工具EntityInsentient(public enum Pets implements EntityInsentient); 这只有在接口(枚举不能扩展类)时才有效.