为什么构造函数未定义?

时间:2017-08-03 09:13:27

标签: 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;
    }
}

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

1 个答案:

答案 0 :(得分: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不符合构造函数的期望,因为枚举Pets不会扩展或实现EntityInsentient

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

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

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