【问题标题】:Concrete vs. Bounded Parameterized Type when designing a typesafe API设计类型安全 API 时的具体与有界参数化类型
【发布时间】:2008-11-21 08:43:35
【问题描述】:

我想听听你们关于在设计 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.
}

我可以解决的办法是在调用 AdminUserEvent.setSource() 时对 User 对象进行类型检查。

您在设计 API 时是否曾提出过这个问题?当这种情况出现时,你会采取什么做法或规则?谢谢。

yc

【问题讨论】:

    标签: java generics


    【解决方案1】:

    我认为您注释掉的UserEvent&lt;S extends User&gt; 方法是正确的——然后您可以声明AdminUserEvent extends UserEvent&lt;AdminUser&gt;。这就是你所需要的吗?

    【讨论】:

      【解决方案2】:

      如果我理解正确的话,这与泛型本身并没有太大关系,而是与并行层次结构有关。 B extends ABHandler extends AHandlerAHandler.handle(A)BHandler.handle(B)

      是的,我相信这可以通过使用泛型来实现类型安全。也就是说,如果我正确理解了您的问题。

      【讨论】:

      • 是的,很抱歉,如果主题不太清楚,这个问题是关于使用泛型特性来实现类型安全的。 yc
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      相关资源
      最近更新 更多