Я делаю небольшую текстовую игру для удовольствия, и я возился с дженериками и столкнулся с проблемой.Проблема с генераторами генераторов
У меня есть класс Экипирующий:
public class Equippable extends Item
{
double mDurability;
public Equippable(String name, double weight, double durability)
{
super(name, weight);
mDurability = durability;
}//Equippable
//Getters
public double getDurability(){return mDurability;}
//Setters
public void setDurability(double Durability){mDurability = Durability;}
}//Equippable
У меня есть конструктор для класса под названием часть тела, которую я хочу принять любой подкласс Экипирующих в качестве параметра:
public BodyPart(String name, Class<? extends Equippable> equipClass)
{
mName = name;
mEquipClass = equipClass;
}//BodyPart
Экипирующих имеют подкласс Броня.
public class Armor extends Equippable
{
double mArmorRating;
public Armor(String name, double weight, double durability, double armorrating)
{
super(name, weight, durability);
mArmorRating = armorrating;
}//Armor
}//Armor
Наконец-то у меня есть несколько классов, которые расширяют Armor.class. Я не буду публиковать их все, так как они идентичны в данный момент, за исключением имени класса.
public class HumanoidBodyArmor extends Armor
{
public HumanoidBodyArmor(String name, double weight, double durability, double armorrating)
{
super(name, weight, durability, armorrating);
}//HumanoidBodyArmor
}//HumanHeadArmor
Когда я делаю:
BodyPart bp = new BodyPart("Head" , Armor.class));
все в порядке, и создается объект. Однако, когда я
BodyPart bp = new BodyPart("Head" , HumanHeadArmor.class));
Eclipse, бросает истерику и говорит
The constructor BodyPart(String, Class<HumanoidHeadArmor>) is undefined
Я был настолько уверен, что это будет работать, но, видимо, я что-то отсутствует. Может кто-то пролил свет на эту тему?
Только для здравомыслия я
Equippable.class.isAssignableFrom(HumanoidHeadArmor.class)
и действительно оценить, верно.
EDIT Как было предложено в комментариях, вот это класс HumanoidBodyArmor
public class HumanoidBodyArmor extends Armor
{
public HumanoidBodyArmor(String name, double weight, double durability, double armorrating)
{
super(name, weight, durability, armorrating);
}//HumanoidBodyArmor
}//HumanoidBodyArmor
Там нет никакой разницы между headarmor/bodyarmor/footarmor. Твое все одинаково, кроме имени. Просто пустые классы с одинаковыми конструкторами, которые просто называют конструктором своего родителя (Armor).
HumanHeadArmor или HumanoidHearArmor? Не могли бы вы показать код обоих классов? –
@JaroslawPawlak * соответствующий код * только ... – m0skit0
У вас нет двух классов с одинаковым именем в вашем пути к классу? В противном случае я не вижу никаких проблем с вашим кодом. –