我想听听各位你们在设计API时如何决定何时应该使用具体的参数化类型与有界参数化类型,尤其是。 (我最关心)定义一个类/接口。
例如,
public interface Event<S>{
void setSource(S s);
}
public interface UserEvent extends EVent<User> // OR: UserEvent<S extends User> extends Event<S>
// It will therefore be void setSource(User s);
}
使用具体参数的问题是,当使用setSource()到新接口时,我无法获得这个编译时的好处,例如,
public interface AdminUserEvent extends UserEvent{
void setSource(AdminUser s); // WHERE: AdminUser extends User. This is a method overloading, we also have a void setSource(User s) inherited from UserEvent.
}
我可以解决的问题是在调用User
时对AdminUserEvent.setSource()
对象进行类型检查。
您在设计API时是否曾提出过这个问题?当出现这种情况时,您将采取哪些做法或规则?感谢。
YC
答案 0 :(得分:1)
我认为您评论的UserEvent<S extends User>
方法是正确的 - 然后您可以声明AdminUserEvent extends UserEvent<AdminUser>
。这就是你所需要的吗?
答案 1 :(得分:0)
如果我理解正确,这本身与泛型无关,而是与并行层次结构有关。 B extends A
,BHandler extends AHandler
和AHandler.handle(A)
,但BHandler.handle(B)
。
是的,我相信这可以通过使用泛型来实现类型安全。也就是说,如果我正确理解你的问题。