Java 如何表示T型必须是U型?

Java 如何表示T型必须是U型?,java,generics,java-8,java-7,Java,Generics,Java 8,Java 7,Java泛型有没有办法告诉编译器类型T必须是U类型?例如 public class Whatever<T, U> { T specific; U moreGeneral; } 公共类{ T特异性; U更一般; } 现在,我想确保T是U的一个子类。有办法指定吗?只需使用 public class Whatever<T extends U,U> 公共类 只需使用 public class Whatever<T extends U,U>

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

public class Whatever<T, U> {

    T specific;
    U moreGeneral;

}
公共类{
T特异性;
U更一般;
}
现在,我想确保T是
U
的一个子类。有办法指定吗?

只需使用

public class Whatever<T extends U,U>
公共类
只需使用

public class Whatever<T extends U,U>
公共类

为了澄清这一点,下面将介绍JDK 1.7之前的版本。当尝试切换U和T的声明顺序时,我得到了对类型参数U的非法正向引用。与其他文章一样,新版本的JDK似乎没有问题

根据这一点,JDK1.7中对此进行了修复

public class Whatever <U, T extends U> {
    T specific;
    U moreGeneral;
}
公共类{
T特异性;
U更一般;
}

为了澄清这一点,下面将介绍JDK 1.7之前的版本。当尝试切换U和T的声明顺序时,我得到了对类型参数U的非法正向引用。与其他文章一样,新版本的JDK似乎没有问题

根据这一点,JDK1.7中对此进行了修复

public class Whatever <U, T extends U> {
    T specific;
    U moreGeneral;
}
公共类{
T特异性;
U更一般;
}

您正在寻找。如果您打算否决我,请说明原因。这就是你想要的礼貌。如果你要否决我,请说明原因。那只是礼貌,这行不通。这将抛出对U的非法正向引用。我想是这样的(首先回答的是颠倒顺序),但只是尝试了一下,效果很好。你自己试试,它可以双向编译(使用JDK 8)@kuriouscoder 1.5?你没有找到旧版本吗他吃了我。现在我正在挖掘修复时的释放。顺便说一句,我碰巧在一台有旧机器的机器上。有另一篇文章与此相关:显然,它是在JDK1.7中修复的,这不起作用。这将抛出对U的非法正向引用。我想是这样的(首先回答的是颠倒顺序),但只是尝试了一下,效果很好。你自己试试,它可以双向编译(使用JDK 8)@kuriouscoder 1.5?你没有找到旧版本吗他吃了我。现在我正在挖掘修复时的释放。顺便说一句,我碰巧在一台有旧机器的机器上。还有一篇文章与此相关:显然,它是在JDK1.7中修复的