0

即使我正在使用 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;
    }
}

任何想法如何解决这个问题,因为我环顾四周,发现除了这种语法之外什么都没有,而且似乎所有关于此类主题的对话都至少有 5 年的历史并且非常模糊。

4

1 回答 1

5

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

 Pets(String name, int id, EntityType et,
      Class<? extends EntityInsentient> nmsClass,
      Class<? extends EntityInsentient> customClass)

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

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

请注意,第 5 个参数 ,Pets.class不符合构造函数的预期,因为 enumPets没有扩展或实现EntityInsentient

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

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

  • 你可以让枚举实现EntityInsentientpublic enum Pets implements EntityInsentient);这仅适用于接口(枚举不能扩展类)。

于 2017-08-03T09:19:48.380 回答