Извиняюсь, если это сформулировано плохо или невозможно найти, я ничего не мог найти на нем, и я почти полностью самоучитель.Можно ли отличить объект как 2 разные вещи в рамках одного и того же метода?
У меня есть класс Entity
и несколько подклассов, Building
и Creature
являются актуальными здесь.
У меня есть метод setTarget(Entity e)
, который я бы хотел использовать для классов Building
и Creature
, потому что на этом уровне они идентичны.
Мне интересно, можно ли отлировать e в Building
или Creature
в зависимости от того, какой тип это, а не создавать 2 целых метода с одним и тем же кодом.
private void setTarget(Entity e) {
if (e.getType.equals("Creature")) {
Creature c = (Creature)e; //rest of code assumes c is now a creature rather than a building
}
}
Я понимаю, что я мог бы сделать это, поставив целевую механику в Entity
классе, но тогда код будет иметь никакого значения для всех других подклассов, которые не имеют/нуждаются цели.
Любая помощь или советы будут очень благодарны, спасибо заранее.
EDIT: Я смотрел в instanceof, и он определенно очищает код немного, но никто не понимал, что я имел в виду;
private void setTarget(Entity e) {
if (e instanceof Creature) {
Creature c = (Creature)e;
} else if (e instanceof Building) {
Building c = (Building)e;
}
//Building OR Creature code here ie;
c.setTarget();
}
Возможно ли это?
Похоже, вы хотите Factory Pattern. Если вы используете полиморфизм, это может быть легко достигнуто. –
Почему вы поместили весь этот код в одну строку? Это невозможно прочитать. –
Вы можете использовать 'e.getClass(). Equals (Creature.class)' или 'e instanceof Creature' в вашей инструкции' if'. – Majora320