Передайте экземпляр подкласса методу и используйте его позже в этом методе - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть метод (prepareErrorMessage), который принимает объекты типа ErrorMessagePojoSuperclass.Однако я передаю только подклассы ErrorMessagePojoSuperclass в качестве аргументов:

public class ErrorMessagePojoBundle extends ErrorMessagePojoSuperclass {}

public class Tester {
    ErrorMessagePojoBundle empb = new ErrorMessagePojoBundle();
    prepareErrorMessage(empb);

    public void prepareErrorMessage(ErrorMessagePojoSuperclass errorMessagePojo) {   
        String errorStatusMsg = messageConverter.convertXMLToString(errorMessagePojo);                             
    }
}

Класс ErrorMessagePojoBundle имеет больше методов, чем его суперкласс.

Мне нужно убедиться, что при выполнении строки кода messageConverter.convertXMLToString(errorMessagePojo), messageConverter обрабатывает экземпляр подкласса - в этом случае объект empb.Есть идеи?Я хочу решить это без использования кастинга.Спасибо.

1 Ответ

0 голосов
/ 18 декабря 2018

Есть идеи?Я хочу решить эту проблему без использования приведения.

Ваши варианты:

  1. Определение интерфейса с необходимым методом, реализация его подклассом и использование этогоинтерфейс как тип параметра, а не суперкласс.
  2. Изменение типа параметра на подкласс, а не суперкласс.
  3. instanceof и приведение (обычно это не то, что вы хотите сделать).

1 и 2 - это просто варианты друг друга.

В вашем примере кода prepareErrorMessage нет причин принимать суперкласс, а не подкласс (или интерфейс), поскольку вещь only может быть выполнена только с подклассом (или с чем-то, реализующим тот же интерфейс).

...