【问题标题】:interface allow any subclass argument接口允许任何子类参数
【发布时间】:2019-04-17 14:58:51
【问题描述】:

如果我有这样的课程

class SuperType {}

class SubTypeOne extends SuperType {}

class SubTypeTwo extends SuperType {}

我想做一个这样的界面

interface TypeHandler {
  public void handle(SuperType arg);
}

但允许这些是有效的实现

class SubTypeOneHandler implements TypeHandler {
  public void handle(SubTypeOne arg) { }
}

如您所见,使用接口中定义的参数类型的子类。

我尝试使用重写界面

interface TypeHandler {
  public void handle(? extends SuperType arg);
}

但它看起来不像是有效的 java。

【问题讨论】:

  • 你需要使接口通用。
  • @SLaks 哦,我明白了,interface TypeHandler<T extends SuperType> ?这是唯一的方法吗?

标签: java inheritance interface


【解决方案1】:

这从根本上来说是不安全的;如果接口被声明为接受SuperType,您必须能够调用具有SuperType 的任何子类的任何实现。

您真正想要的是每个子类型的不同的、类型安全的接口版本。
这就是泛型的用途;你需要使接口通用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 2013-05-06
    • 2020-01-04
    • 2020-04-01
    • 2023-03-03
    • 1970-01-01
    • 2015-08-14
    • 2011-04-04
    相关资源
    最近更新 更多