Java-интерфейсы - параметрический полиморфизм - PullRequest
3 голосов
/ 21 января 2011

В Java, каков «правильный» способ реализации интерфейса, где параметры для метода требуют параметрического полиморфизма?

Например, мой интерфейс содержит:

public int addItem(Object dto);

Интерфейс реализован различными классами, но в каждом параметре dto есть один из различных строго типизированных объектов, таких как planeDTO, trainDTO или automotiveDTO.

Например, в моем самолете DAO класс:

public int addItem(planeDTO dto) { ... }

Я просто реализую с параметром dto значение Object, а затем приведу к соответствующему типу?

Ответы [ 4 ]

4 голосов
/ 21 января 2011

Если DTO все inhrerit от общего суперкласса или реализуют общий интерфейс, вы можете сделать:

// DTO is the common superclass/subclass
public interface Addable<E extends DTO> {

    public int addItem(E dto);

}

И ваши конкретные реализации могут сделать:

public class PlaneImpl implements Addable<planeDTO> {
    public int addItem(planeDTO dto) { ... }
}

Или вы можете просто определить свой интерфейс для интерфейса / суперкласса:

// DTO is the common superclass/subclass
public interface Addable {

    public int addItem(DTO dto);

}

Edit:

Вам может потребоваться следующее:

Создать интерфейс -

interface AddDto<E> {
    public int addItem(E dto);
}

И внедрите это в свои DAO.

class planeDAO implements AddDto<planeDTO> {
    public int addItem(planeDTO dto) { ... }
}
0 голосов
/ 21 января 2011

Вы также можете использовать универсальные методы:

public interface Addable{
   public <T extends DTO> int addItem(T dto){}
}

Подробнее об универсальных методах можно прочитать по адресу: http://download.oracle.com/javase/tutorial/extra/generics/methods.html

0 голосов
/ 21 января 2011

Вы пытаетесь достичь чего-то вроде двойной отправки ?Какое поведение зависит от типа аргумента?

0 голосов
/ 21 января 2011

Почему бы не использовать интерфейс, который обеспечивает необходимую вам функциональность и не ссылаться на конкретные типы?

public int addItem(ITransportationMode mode);

Где planeDTO, trainDTO и automobileDTO все реализуют ITransportationMode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...