0

我开始学习 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 的类参数。

我的猜测是对还是错?特别是第二种和第三种情况的使用有什么区别?

提前感谢您的解释!

4

1 回答 1

1

那么不同的是你不能?在泛型类声明中使用

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

上述声明导致编译器错误。

从文档:

泛型类使用以下格式定义:

class name { /* ... */ } 类型参数部分,由尖括号 (<>) 分隔,跟在类名之后。它指定类型参数(也称为类型变量)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>(); 
于 2012-12-27T14:00:07.033 回答