Java泛型-何时使用;";“和”&引用;

Java泛型-何时使用;";“和”&引用;,java,generics,Java,Generics,有什么区别 public class MyClass<? extends MySuperClass> { private T data ; private MyClass<? extends MySuperClass> parent ; } 公共类MyClass,和是完全不同的 class X声明了一个泛型类,其类型参数(占位符)名为T。在该类中,T是有效的类型 X something是变量或字段声明。它声明一个类型为泛型的变量,并指定泛型参数

有什么区别

public class MyClass<? extends MySuperClass> {

     private T data ;
     private MyClass<? extends MySuperClass> parent ;

}
公共类MyClass
是完全不同的

  • class X
    声明了一个泛型类,其类型参数(占位符)名为
    T
    。在该类中,
    T
    是有效的类型

  • X something
    是变量或字段声明。它声明一个类型为泛型的变量,并指定泛型参数的值

  • X something
    也是一个变量或字段声明。它声明类型为泛型的变量,但不指定泛型参数的值


创建泛型类时,可以选择向泛型参数添加约束,指定当人们声明该类的实例(变量)时允许的类型

因此,
class X
创建了一个具有不太灵活的类型参数的泛型类


当您使用泛型类(例如,
private Collection myStrings
)时,显然无法指定泛型参数值的约束(因为您已经指定了实际值)

因此,
私有集合myStrings
毫无意义


当使用带有通配符(或未绑定)参数的泛型类(例如,
private Collection mythings
)时,可以选择在上指定约束,不管参数是什么。这允许您假设有关泛型参数(未知)值的情况


因此,
private Collection
T data
在第一个代码块中没有意义,甚至不应该编译。请不要简单地否决投票!解释否决投票的原因或解释不同之处?我没有否决投票(如果该评论是针对我的)。但更重要的是,您是否尝试编译这两个代码块?如果是这样,你应该告诉我们结果。如果没有,你应该毫不拖延地去做。@HovercraftFullOfEels-我想我们在发表评论时有过交叉,我的评论本来是写给曾经否决过它的人的。谢谢你能解释一下第二节课的问题吗?我已经试过编译了,你是对的,在第一个例子中没有意义。第二个怎么样?试图理解这里的问题。
public class MyClass<T extends MySuperClass> {

     private T data ;
     // the below line - no compilation errors
     private MyClass<? extends MySuperClass> parent ;
     // the below line - compilation errors 
     private MyCLass<T extends MySuperClass> child ;


}