- Java泛型教程
- Java泛型 - 首页
- Java泛型 - 概述
- Java泛型 - 环境设置
- 示例 - 泛型类
- Java泛型 - 泛型类
- 类型参数命名约定
- Java泛型 - 类型推断
- Java泛型 - 泛型方法
- Java泛型 - 多个类型参数
- Java泛型 - 参数化类型
- Java泛型 - 原始类型
- 示例 - 有界类型
- 有界类型参数
- Java泛型 - 多个界限
- 示例 - 集合
- Java泛型 - 泛型列表
- Java泛型 - 泛型集合
- Java泛型 - 泛型映射
- 示例 - 通配符
- 上界通配符
- 泛型 - 无界通配符
- 下界通配符
- 泛型 - 通配符指南
- 类型擦除
- Java泛型 - 类型擦除
- Java泛型 - 有界类型擦除
- 无界类型擦除
- Java泛型 - 方法擦除
- 泛型的限制
- Java泛型 - 不允许使用基本类型
- Java泛型 - 不允许实例化静态成员
- Java泛型 - 不允许静态字段
- Java泛型 - 不允许强制类型转换
- Java泛型 - 不允许使用instanceOf
- Java泛型 - 不允许创建泛型数组
- Java泛型 - 不允许抛出泛型异常
- Java泛型 - 不允许重载泛型方法
- Java泛型有用资源
- Java泛型 - 快速指南
- Java泛型 - 有用资源
- Java泛型 - 讨论
Java泛型 - 下界通配符
问号 (?) 代表通配符,在泛型中表示未知类型。有时您可能需要限制允许传递给类型参数的类型的种类。例如,对数字进行操作的方法可能只想接受 Integer 或其超类(如 Number)的实例。
要声明下界通配符参数,请列出 ?,然后是 super 关键字,然后是其下界。
示例
以下示例说明如何使用 super 指定下界通配符。
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.List;
public class GenericsTester {
public static void addCat(List<? super Cat> catList) {
catList.add(new RedCat());
System.out.println("Cat Added");
}
public static void main(String[] args) {
List<Animal> animalList= new ArrayList<Animal>();
List<Cat> catList= new ArrayList<Cat>();
List<RedCat> redCatList= new ArrayList<RedCat>();
List<Dog> dogList= new ArrayList<Dog>();
//add list of super class Animal of Cat class
addCat(animalList);
//add list of Cat class
addCat(catList);
//compile time error
//can not add list of subclass RedCat of Cat class
//addCat(redCatList);
//compile time error
//can not add list of subclass Dog of Superclass Animal of Cat class
//addCat.addMethod(dogList);
}
}
class Animal {}
class Cat extends Animal {}
class RedCat extends Cat {}
class Dog extends Animal {}
这将产生以下结果:
Cat Added Cat Added
广告