Я хочу напечатать описание воина на консоли, которое будет включать в себя силу воина и оружие воина в виде This <description> warrior uses a <weapon>
Например: This strong warrior uses a butter knife
.
Редактировать для ясности: Я хочу сделать это, не запрашивая объекты для данных, используя методы получения или любой другой метод (например, toString), который показывает внутреннюю реализацию объекта.Я также хочу сделать это без жесткого кодирования моего текущего пользовательского интерфейса (консоли) в самих объектах.
public class Warrior
{
private String description;
private Weapon weapon;
public Room(String description, Weapon weapon)
{
this.description = description;
this.weapon = weapon
}
}
public class Weapon
{
private String name;
public Weapon(String name)
{
this.name = name;
}
}
Избегание получателей
Я могу избежать получателей путем жесткого кодирования пользовательского интерфейса:
//Warrior class
public void display()
{
String.out.println("This " + description + " warrior uses a ");
weapon.display();
}
//Weapon class
public void display()
{
String.out.print(name);
}
Избегание жестко закодированного пользовательского интерфейса
Я могу избежать жестко закодированного пользовательского интерфейса, используя геттеры:
//Warrior class
public String getDescription()
{
return "This " + description + " warrior uses a " + weapon.getName();
}
//Weapon class
public String getName()
{
return name;
}
Можно ли избежать того и другого?Как я могу сделать это в приведенном выше примере?
Примечание. В ответ на некоторые первоначальные ответы метод получения не является методом, который следует соглашению об именах getSomeFieldName
.Поэтому переименование getSomeFieldName
в aMethodThatIsNotPrefixedByGet
не является решением.Метод получения - это метод, который передает личные данные из объекта в область, которая его вызвала.
Чтобы быть совершенно ясным, проблема, с которой я пытаюсь здесь разобраться, связана с инкапсуляцией данных (так как этот вопросотмеченном).Как я могу предотвратить передачу данных объектам, которым не нужно знать эти данные и все же избегать жесткого кодирования пользовательского интерфейса?
Кроме того, на основе на эти вопросы , я не думаю, что toString следует использовать так, как это было предложено во многих ответах.Кажется, toString предназначен для генерации текстового представления объекта для отладки и т. д., а не для возврата произвольных выходных данных и особенно не для возврата зависимых от приложения выходных данных.