理解Java泛型中对?的上界和下界 注意:本文中的内容是关于Java泛型中对?的上界和下界的解释。

6 浏览
0 Comments

理解Java泛型中对?的上界和下界 注意:本文中的内容是关于Java泛型中对?的上界和下界的解释。

我真的很难理解通配符参数。我有几个关于这个问题的问题。

1. 类型参数中的?只能在方法中使用,例如:printAll(MyList),我不能使用?来定义类。

2. 我理解?的上界。例如:printAll(MyList)的意思是:“如果MyList中有实现Serializable接口的对象,printAll将会打印MyList”。

3. 我对super有些困惑。例如:printAll(MyList)的意思是:“如果MyList中有MyClass或其子类的对象(MyClass的后代),printAll将会打印MyList”。

请纠正我哪里错了。

简而言之,只有TEKVN可以作为用于定义泛型类的类型参数。而?只能在方法中使用。

更新1:

public void printAll(MyList){
    // 代码
}

根据Ivor Horton的书,MyList的意思是,如果MyList中有MyClass或其实现的任何接口或类的对象,我可以打印MyList。也就是说,MyClass是一个下界。它是继承层次结构中的最后一个类。这意味着我的初始假设是错误的。

假设MyClass如下:

public class MyClass extends Thread implements ActionListener{
    // 任何内容
}

那么,printAll()将会在以下情况下打印:

1. 列表中有MyClass的对象;

2. 列表中有ThreadActionListener的对象。

更新2:

经过阅读这个问题的众多答案后,我对此有了一些了解:

1. ? extends T表示任何继承自T的类。因此,我们是在引用T的子类。因此,T是上界。继承层次结构中最高的类

2. ? super T表示任何是T的超类/接口。因此,我们是在引用T的所有父类。因此,T是下界。继承层次结构中最低的类

0