Почему конструктор не определен?

Хотя я работаю с 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 ответ

Конструктор вашего перечисления 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, не соответствует тому, что ожидает конструктор, потому что enum Pets не расширяет и не реализует EntityInsentient,

Есть несколько способов решить эту проблему, но какой из них вы должны использовать, зависит от остальной части вашей программы и того, чего вы пытаетесь достичь:

  • Вы можете изменить конструктор и поле customClassудалить связанное extends EntityInsentient,

  • Вы могли бы сделать перечисление реализовать EntityInsentient (public enum Pets implements EntityInsentient); это будет работать только если это интерфейс (перечисления не могут расширять классы).

Другие вопросы по тегам