【问题标题】:Bound mismatch: type is not a valid substitute for the bounded parameter有界不匹配:类型不是有界参数的有效替代品
【发布时间】:2015-01-09 21:04:31
【问题描述】:

我收到以下错误Bound mismatch: The type FFTWTask is not a valid substitute for the bounded parameter <T extends AbsTask<T>> of the type AbsStage<T,U>

我代表一个抽象阶段:

public abstract class AbsStage<T extends AbsTask<T>, U extends AbsTask<U>> { }

AbsTask 在哪里:

public abstract class AbsTask <T> { }

然后我创建一个名为 FFTWTask 的 AbsTask:

public class FFTWTask extends AbsTask<Double>{ }

最后,我创建了一个名为 FFTWStage 的 AbsStage:

public class FFTWStage extends AbsStage<FFTWTask, FFTWTask>{ } // Error occurs here

我对泛型的理解缺少什么。我发现很多帖子都有相同的错误信息,但我似乎无法破译它们。

下面是一个实现报错的简单类:

public class Test {
  public abstract class AbsTask <T> { }
  public class FFTWTask extends AbsTask<Double>{ }

  public abstract class AbsStage<T extends AbsTask<T>, U extends AbsTask<U>> { }
  public class FFTWStage extends AbsStage<FFTWTask, FFTWTask>{ } // Error here <-
}

【问题讨论】:

    标签: java generics


    【解决方案1】:

    如果AbsStage中的类型参数T必须扩展AbsTask&lt;T&gt;,那么FFTWTask必须扩展AbsTask&lt;FFTWTask&gt;才能在FFTWStage中使用:

    public class FFTWTask extends AbsTask<FFTWTask>{ }
    

    【讨论】:

    • 这解决了测试中的错误。现在如何表示任务的某些数据类型,以便我可以让任务在其中保存 Double(或其他类型)。
    • 您可以从AbsStage (AbsStage&lt;T extends AbsTask, U extends AbsTask&gt;) 中的TU 中删除递归类型边界
    • 是的,解决了这个问题。太感谢了。严重的泛型有时让我非常头疼......感谢您帮助我完成它
    • 只是一个问题:是否有可能让 AbsStage 期望 T 和 U 是某种类型的 AbsTask:例如,这是否有意义:public abstract class AbsStage, U 扩展 AbsTask>> { }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多