Java 泛型学习二 泛型的限制
Java 泛型学习一 泛型概念
Java 泛型学习二 泛型的限制
Java 泛型学习三 通配符
Java 泛型学习四 自动擦除
Java 泛型学习五 泛型擦除带来的不自然
Java 泛型学习六 泛型类型系统
在实际开发过程中,有时需要限制类型变量的类型,使其在一定范围内,这就要使用extends关键字,基本语法如下:
类型变量 extends 限定类型序列
- ”限定类型序列“表示类型变量实际可以指定的范围,例如"T extends Fruit"表示类型变量T的类型只能为Fruit或其子类类型;
- “限定类型序列”可以有多个类型,这些类型可以是类也可以接口,多个类型之间使用“&”分割,但最多只能有一个类,这和Java是单继承类似的,可以有多个接口;如果“限定类型序列”中有类,类必须放在第一个;
示例代码:
package net.oseye;public class FanXing {
public static void main(String[] args) {
Fruit fruit=new Fruit();
fruit.setColor("未知水果,未知颜色!");
Apple apple=new Apple();
apple.setColor("有红苹果和青苹果,但不知道这个苹果是什么颜色!");
Apple redApple=new RedApple();
redApple.setColor("红色!");
Apple greenApple=new GreenApple();
greenApple.setColor("青色!");
SayColor(apple);
SayColor(redApple);
SayColor(greenApple);
//SayColor(fruit);
}
static <T extends Apple> void SayColor(T apple){
System.out.println(apple.getColor());
}
}
class Fruit{
private String color;
public void setColor(String color){
this.color=color;
}
public String getColor(){
return this.color;
}
}
class Apple extends Fruit{
}
class RedApple extends Apple{
}
class GreenApple extends Apple{
}
如果删除SayColor(fruit);的注释,会提示如下异常信息:
net\oseye\FanXing.java:17: 错误: 无法将类 FanXing中的方法 SayColor应用到给定类型;
SayColor(fruit);
^
需要: T
找到: Fruit
原因: 推断类型不符合声明的范围
推断: Fruit
范围: Apple
其中, T是类型变量:
T扩展已在方法 <T>SayColor(T)中声明的Apple
1 个错误
可见,泛型的限制起到了作用。
以上是 Java 泛型学习二 泛型的限制 的全部内容, 来源链接: utcz.com/z/391396.html