【问题标题】:How to express that type T must be of type U?如何表示 T 类型必须是 U 类型?
【发布时间】:2014-12-19 23:31:16
【问题描述】:

Java 泛型有没有办法告诉编译器T 类型必须是U 类型?例如

public class Whatever<T, U> {

    T specific;
    U moreGeneral;

}

现在,我想确保 T 是 U 的子类。有没有办法指定这个?

【问题讨论】:

标签: java generics java-8 java-7


【解决方案1】:

简单使用

public class Whatever<T extends U,U>

【讨论】:

  • 这行不通。这将引发对 U 的非法前向引用。
  • 我是这么认为的(首先回答颠倒顺序),但只是尝试过,它有效。自己尝试,它可以编译两种方式(使用JDK 8)
  • @kuriouscoder 1.5?没找到旧版本吗? :D
  • 击败我。现在我正在挖掘它何时修复的版本。顺便说一句,我碰巧在一台旧机器上。
  • 还有一篇与此相关的帖子:stackoverflow.com/questions/13501836/…stackoverflow.com/questions/5201687/… 显然,它已在 JDK 1.7 中修复
【解决方案2】:

为了澄清,以下将在 JDK pre 1.7 上解决问题。当试图切换 U 和 T 的声明顺序时,我得到illegal forward reference to type argument U。与其他帖子一样,较新的 JDK 版本似乎不是问题。

根据post,这已在 JDK 1.7 中修复

public class Whatever <U, T extends U> {
    T specific;
    U moreGeneral;
}

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 2016-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    相关资源
    最近更新 更多