Правильный способ реализации метода интерфейса Java - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть этот интерфейс

public interface MyInterface{
    Collection<T> Find(T t);
    Collection<T> FindAll();
    T FindById(int id);
    void Add(T t);
    void Remove(T t);
}

Что я должен сделать для метода T FindById(int id), если мне нужно гарантировать, что у T будет Id типа int?Должен ли я создать другой интерфейс, который мой объект должен расширять для использования FindById?

Ответы [ 4 ]

4 голосов
/ 17 ноября 2011

Должен ли я создать другой интерфейс, который мой объект должен расширять, чтобы использовать FindById

Да (хотя это не относится к методу FindById). Точнее, у вас должен быть другой интерфейс, который может гарантировать, что у вашего класса будет целочисленный идентификатор, к которому вы можете получить доступ. Что-то вроде этого должно быть достаточно:

public interface HasId {
    int GetId();
}

Затем вы можете использовать MyInterface класс T extends HasId следующим образом:

public interface MyInterface<T extends HasId> {
    Collection<T> Find(T t);
    Collection<T> FindAll();
    T FindById(int id);
    void Add(T t);
    void Remove(T t);
} 
3 голосов
/ 17 ноября 2011

Чтобы действительно обеспечить безопасность типов, а также гибкость для не int идентификаторов, попробуйте что-то вроде:

public interface IdentifiedThing<I extends Serializable> {
    I getId();
}

Затем вы можете заблокировать ввод:

public interface MyInterface<I extends Serializable, IT extends IdentifiedThing<I>> {
    Collection<IT> find(IT t);
    Collection<IT> findAll();
    IT findById(I id);
    void add(IT t);
    void remove(IT t);
}

(я также исправил использование заглавных букв в стиле Java; -)

1 голос
/ 17 ноября 2011

Вы можете принимать только определенные объекты в свою коллекцию, например, здесь это Entity, в котором наверняка будет id

interface Entity {
    int getId();
}

interface MyCollection<T extends Entity> {
    T findById(int id);
}
0 голосов
/ 17 ноября 2011

это шаблонный способ здесь. И что-то не так, должно быть

public interface MyInterface<T>{

T - тип шаблона.

Когда вы реализуете этот интерфейс, должен быть задан тип для замены T, в противном случае T будет заменен на Object.

Я думаю, что вы правы, если вы хотите гарантировать, что в возвращаемом типе есть идентификатор типа int.

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