Java 泛型学习二 泛型的限制

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

回到顶部