2017-08-03 2 views
0

Même si je travaille avec Bukkit, il s'agit d'un problème Java;Pourquoi le constructeur n'est-il pas défini?

Je ne sais pas, pourquoi Java dit le constructeur est défini, puisqu'il est défini

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; 
    } 
} 

Toute idée comment tho résoudre ce problème, parce que je regardais autour et rien d'autre que trouvé cette syntaxe et il semble Comme toutes les conversations sur des sujets comme celui-ci ont au moins 5 ans et sont très vagues.

Répondre

5

Le constructeur de votre ENUM Pets attend 5 paramètres:

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

Lorsque vous déclarez la COW constante que vous utilisez ce constructeur:

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

Notez que le 5ème paramètre, Pets.class, ne conforme à ce que le constructeur attend, car l'énumération Pets ne s'étend pas ou n'implémente pas EntityInsentient.

Il existe plusieurs façons de résoudre ce problème, mais celui que vous devez utiliser dépend du reste de votre programme et ce que vous essayez d'atteindre:

  • Vous pouvez changer le constructeur et le champ customClass , retirez la reliure extends EntityInsentient. Vous pouvez créer l'outil enum EntityInsentient (public enum Pets implements EntityInsentient); cela ne fonctionnera que si c'est une interface (les enums ne peuvent pas étendre les classes).