Я делаю игру, и у меня есть класс Tile, который содержит Item.
public clas Tile{
Item item;
....
public void setItem(Item item){
this.item = item;
}
}
Когда у меня есть ссылка на Tile, я хочу вызвать метод interact()
для элемента. Как я могу это сделать, не проверяя, является ли объект null
. Я не думаю, что шаблон Null
Object будет работать в этом сценарии, потому что будет смешанное объединение экземпляров - подкласс элемента, который будет представлять пустой элемент, будет иметь метод empty interact()
.
Вы пытаетесь найти способ не проверить, является ли объект нулевым, когда null является опцией.
В этом случае, чтобы проверить, если item != null
item.interact()
, перед выполнением item.interact()
не является анти-шаблоном или хакерским решением.
Стереотипическое решение проблемы объединения смешанных экземпляров заключается в создании подклассов (и убедитесь, что суперкласс не предоставляет специфические для подкласса функции).
Таким образом, вы создаете подкласс ItemTile
и NonItemTile
для Tile
.
public abstract class Tile {
public abstract void interact();
}
public class ItemTile extends Tile {
private final Item item;
....
public ItemTile(Item item) {
// Null-check to enforce contract - could be omitted if you make this
// the responsibility of the caller.
if (item == null)
throw new NullPointerException("item");
this.item = item;
}
public void interact() {
item.interact();
}
}
NoItem
.