【问题标题】:Force all extends and implements of interface to use bounded generic input强制接口的所有扩展和实现使用有界通用输入
【发布时间】:2018-08-13 05:30:44
【问题描述】:
public interface AbstractTestStep<I extends StepPojo> {

    public abstract StepResult run(I t);
}

public interface Triggers extends AbstractTestStep{
}

public interface GetInstance extends Triggers{

    StepResult run(GetInstancePojo t);

}

我想强制 GetInstancePojo 成为从第一个顶级接口定义的 StepPojo 的子类。我怎样才能做到这一点?这个我找了好久都没找到。

【问题讨论】:

  • 是故意使用AbstractTestStep 还是您的意思是AbstractStep?如果是这样,请使用public interface &lt;T&gt; Triggers extends AbstractStep&lt;T&gt;
  • @VivekKrishna 这是他的错字,尝试使用interface Triggers&lt;T&gt; extends AbstractStep&lt;T&gt;

标签: java generics


【解决方案1】:

您必须在整个层次结构中引用该通用参数:

public interface AbstractStep<I extends StepPojo>{
    StepResult run(I i);
}

public interface Triggers<I extends StepPojo> extends AbstractStep<I>{}

public interface GetInstance extends Triggers<GetInstancePojo>{}

尽管使用当前代码,您甚至不需要 Triggers 接口(前提是您没有在其中声明其他方法)

【讨论】:

  • 问题是限制其他人定义具有相同“运行”方法名称的新方法,参数类型不是。我仍然可以在我的 GetInstance 中使用 以外的参数定义一个新方法。希望我没有给你添麻烦。我猜没有正确沟通。
  • @VivekKrishna 你不能强制执行,但它甚至不需要。因为当您构建 API 或其他人可以使用的东西时,他们需要遵循您的接口提供的合同,如果他们更改任何内容并且它不起作用。那么这不是你的错。总之,不要真的打扰
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多