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 个错误
可见,泛型的限制起到了作用。