2017-08-03 222 views
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岁,非常模糊。

回答

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);这只会在接口(枚举不能扩展类)时才起作用。

相关问题