2012-12-27 28 views
0

我开始学习Java泛型。我对泛型语法及其含义有一些误解。我恳求理解我的问题看起来是否微不足道。了解Java中泛型的语法

  1. 你可以写:

    public class MyClass<SomeClass> {} 
    
  2. ,你可以写:

    public class MyClass<C extends SomeClass> {} 
    
  3. ,你也可以这样写:

    public class MyClass<? extends SomeClass> {} 
    

这几种情况之间的区别是什么

  1. 第一种情况是绝对清楚的对我说:你可以使用SomeClass的实例和他的子类作为类的参数的MyClass 实例。
  2. 我认为,在这种情况下,你只能使用MyClass的的子类
  3. 同样的例如:只使用MyClass的的子类实例作为类的参数MyClass的。

我的猜测是否正确?特别是第二和第三种情况的区别是什么?

在此先感谢您的解释!

+0

“3.你也可以这样写:公共MyClass类<?延伸SomeClass的> {}” 不,你不能 – newacct

回答

1

那么不同的是,你不能在泛型类声明

public class MyClass<? extends SomeClass> {} // this isn't valid 

上述声明导致编译器错误使用?

From Documentation:

泛型类与以下格式定义:

类名{/ * ... * /} type参数部, 由尖括号分隔(<>) ,跟在课程名称后面。它指定了 类型参数(也称为类型变量)T1,T2,...和Tn。

public class MyClass<C extends SomeClass> {} 

在此声明C类型参数这可能是类型SomeClass的或任何其子类的的。

例子:

Class SomeOtherClass extends SomeClass { 
} 

MyClass clazz = new MyClass<SomeOtherClass>(); 
MyClass clazz = new MyClass<SomeClass>();