Как обновить метод, который можно использовать для двух разных объектов в Java

#java #oop #generics

Вопрос:

У меня есть объект с именем Orders. В этом объекте у меня есть два параметра: Транспортное средство и Клиент. Прямо сейчас у меня есть метод под названием showOrder. Этот метод выведет тип транспортного средства и имя клиента.

 public void showOrder() {  System.out.println("-------------------------------------------------------|Order Placed|-------------------------------------------------------");  System.out.println("The order for the car type "   vehicle.getType()   " it was place on the name "   customer.getName()   " in date of "   date);  System.out.println("----------------------------------------------------------------------------------------------------------------------------"); }  

Допустим, в будущем я добавлю в заказ объекта новое строительное имущество. Как я могу изменить этот метод сейчас, чтобы в будущем, когда я добавлю новое свойство, его можно было использовать для отображения как зданий, так и типов транспортных средств? Оба они будут реализовывать интерфейс, доступный для аренды. Идея в том, что я хочу сделать этот код настолько универсальным и независимым, насколько это возможно…

Надеюсь, я выразился достаточно ясно. Спасибо,

Комментарии:

1. Как выглядит ваш Rentable интерфейс? Как выглядят остальные члены вашего Orders класса?

2. Если у вас есть некоторые заказы, которые являются транспортными средствами, а другие-зданиями, вы можете использовать полиморфизм для определения абстрактора суперкласса и двух подклассов VehicleOrder и BuildingOrder. Суперкласс может определять и вызывать абстрактные методы, такие как showOrder () или getDisplayName(). ОТО, если в одном заказе может быть как транспортное средство, так и здание, то вам нужен только один класс.

Ответ №1:

Если я вас правильно понял, вы хотите иметь возможность помещать объект как Vehicle типа, так и Building типа в переменную vehicle . Для этого вы можете использовать абстрактный суперкласс, от которого унаследуют как класс транспортного средства, так и класс здания. Это может выглядеть примерно так:

 public abstract class AbstractClass {  public abstract String getType(); }  

Класс транспортного средства:

 public class Vehicle extends AbstractClass {  String type;  public String getType() {  return type;  } }  

Класс здания тогда выглядит очень похоже:

 public class Building extends AbstractClass {  String type;  public String getType() {  return type;  } }  

Теперь в Order классе вам нужно изменить тип переменной vehicle на AbstractClass . С помощью этого вы можете поместить объект как Vehicle класса, так и Building класса в эту переменную. Код в вашем showOrder методе в основном остается таким же, как у обоих классов, которые вы могли бы поместить в vehicle объект, есть метод getType .