繁体   English   中英

实现Java接口方法的正确方法

[英]Correct Way of Implementing Java Interface Method

我有这个界面

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

如果需要确保T具有一个类型为int的Id,我该对T FindById(int id)方法做什么? 是否应该创建我的对象必须扩展才能使用FindById的另一个接口?

是否应该创建我的对象必须扩展才能使用FindById的另一个接口?

是的(尽管它并不特定于FindById方法)。 更准确地说,您应该具有另一个接口,该接口可以保证您的类将具有可以访问的整数ID。 这样的事情就足够了:

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);
} 

要真正获得类型安全性以及非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样式;-)

您只能接受特定的对象到您的集合中,例如这里的Entity肯定具有id

interface Entity {
    int getId();
}

interface MyCollection<T extends Entity> {
    T findById(int id);
}

这是这里的模板方式。 而且出了点问题,应该是

public interface MyInterface<T>{

T是模板类型。

当实现这个接口时,应该给出一个类型来替换T,如果没有,T将被Object替换。

我认为您是对的,如果您想保证返回类型中有一个int类型的id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM