Я хотел бы услышать от вас, ребята, как вы решаете, когда вам следует использовать конкретный параметризованный тип по сравнению с ограниченным параметризованным типом при разработке 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? И какие практики или правила вы будете использовать, когда возникнет такая ситуация? Спасибо.
Ус