[英]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.