【问题标题】:Understanding syntax of generics in Java理解 Java 中泛型的语法
【发布时间】:2012-12-27 13:51:45
【问题描述】:

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

我的猜测是否正确?尤其是第二种和第三种情况的使用有什么区别?

提前感谢您的解释!

【问题讨论】:

  • "3. 你也可以这样写: public class MyClass extends SomeClass> {} " 不,你不能

标签: java hierarchy class-hierarchy generics


【解决方案1】:

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

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

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

From Documentation:

泛型类的定义格式如下:

类名 { /* ... */ } 类型参数部分, 由尖括号 () 分隔,跟在类名之后。它指定 类型参数(也称为类型变量)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-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2017-11-06
    • 2010-09-16
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多