Метод получения Список других типов данных в качестве параметра

У меня есть метод и в качестве параметра я отправляю список. Метод выглядит так:

public static void setSanctionTypes(List<QueueSueDTO> items) {

    for (QueueSueDTO dto : items) {

        StringBuffer sb = sanctionTypeRutine(dto.getRegres().getDebtors());

        String sanctionType = sb.toString();
        dto.setSanctionType(sanctionType);
    }
}

Мне нужно использовать этот метод для различных параметров типов данных List (например, setSanctionTypes(List<QueuePaymentDTO> items); так далее.). Все предложения, которые я хочу отправить в качестве параметра, имеют метод getRegres()так что содержание setSanctionTypes() Метод является общим и применимым для всех этих классов, которые я хочу отправить ему.

Если я сделаю это

public static void setSanctionTypes(List<?> items) {

    for (Object dto : items) {

        StringBuffer sb = sanctionTypeRutine(dto.getRegres().getDebtors());

        String sanctionType = sb.toString();
        dto.setSanctionType(sanctionType);
    }
}

dto типа Object не знает о getRegres(). Я могу привести к требуемому типу, но это будет только один конкретный тип, и он не будет использоваться для других параметров...

Есть ли способ решить мою проблему? Благодарю.

3 ответа

Решение

Вы должны определить интерфейс, который заставляет классы реализовать getRegres(). Затем вы реализуете этот интерфейс для всех нужных вам классов и используете:

interface Interface {
  <type> getregres();
}

public static void setSanctionTypes(List<? extends Interface> items) {

Если у вас есть интерфейс, объявляющий ваш метод getRegres(), и ваши записи в списке реализуют его:

public static void setSanctionTypes(List<? extends YourInterface> items) {

    for (YourInterface dto : items) {

        StringBuffer sb = sanctionTypeRutine(dto.getRegres().getDebtors());

        String sanctionType = sb.toString();
        dto.setSanctionType(sanctionType);
    }
}

Для получения дополнительной информации о "дженериках": http://download.oracle.com/javase/tutorial/java/generics/index.html

Все типы, как QueueSueDTO должны реализовать общий интерфейс. Таким образом, вы объявляете свою функцию как setSanctionTypes(List<? extends QueueDTO> items),

Интерфейс должен содержать getRegres и любые другие функции, которые вы считаете релевантными для всех ваших классов, которые используются в качестве аргументов setSanctionTypes:

interface QueueDTO
{
    RegresType getRegres();
    // maybe some more methods
}
Другие вопросы по тегам