Метод получения Список других типов данных в качестве параметра - PullRequest
1 голос
/ 20 октября 2011

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

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 ]

2 голосов
/ 20 октября 2011

Если у вас есть интерфейс, объявляющий ваш метод 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

1 голос
/ 20 октября 2011

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

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

interface QueueDTO
{
    RegresType getRegres();
    // maybe some more methods
}
1 голос
/ 20 октября 2011

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

interface Interface {
  <type> getregres();
}

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