扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:中国IT实验室 来源:中国IT实验室 2007年8月21日
关键字: JDK
1.3 受限泛型
受限泛型是指类型参数的取值范围是受到限制的. extends关键字不仅仅可以用来声明类的继承关系, 也可以用来声明类型参数(type parameter)的受限关系.例如, 我们只需要一个存放数字的列表, 包括整数(Long, Integer, Short), 实数(Double, Float), 不能用来存放其他类型, 例如字符串(String), 也就是说, 要把类型参数T的取值泛型限制在Number极其子类中.在这种情况下, 我们就可以使用extends关键字把类型参数(type parameter)限制为数字
示例
public class Limited<T extends Number> { public static void main(String[] args) { Limited<Integer> number; //正确 Limited<String> str; //编译错误 } } |
1.4 泛型与异常
类型参数在catch块中不允许出现,但是能用在方法的throws之后。例:
import java.io.*; interface Executor<E extends Exception> { void execute() throws E; }
public class GenericExceptionTest { public static void main(String args[]) { try { Executor<IOException> e = new Executor<IOException>() { public void execute() throws IOException{ // code here that may throw an // IOException or a subtype of // IOException } }; e.execute(); } catch(IOException ioe) { System.out.println("IOException: " + ioe); ioe.printStackTrace(); } } } |
1.5 泛型的通配符"?"
"?"可以用来代替任何类型, 例如使用通配符来实现print方法。
public static void print(GenList<?> list) {})
1.6 泛型的一些局限型
不能实例化泛型
T t = new T(); //error
不能实例化泛型类型的数组
T[] ts= new T[10]; //编译错误
不能实例化泛型参数数
Pair<String>[] table = new Pair<String>(10); // ERROR
类的静态变量不能声明为类型参数类型
public class GenClass<T> {
private static T t; //编译错误
}
泛型类不能继承自Throwable以及其子类
public GenExpection<T> extends Exception{} //编译错误
不能用于基础类型int等
Pair<double> //error
Pair<Double> //right
2 增强循环(Enhanced for Loop)
旧的循环
LinkedList list = new LinkedList(); list.add("Hi"); list.add("everyone!"); list.add("Was"); list.add("the"); list.add("pizza"); list.add("good?"); for (int i = 0; i < list.size(); i++) System.out.println((String) list.get(i)); //或者用以下循环 //for(Iterator iter = list.iterator(); iter.hasNext(); ) { //Integer stringObject = (String)iter.next(); // ... more statements to use stringObject... //} 新的循环 LinkedList<String> list = new LinkedList<String>(); list.add("Hi"); list.add("everyone!"); list.add("Was"); list.add("the"); list.add("pizza"); list.add("good?"); for (String s : list) System.out.println(s); |
很清晰、方便,一看便知其用法
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者