科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件JDK5.0的11个主要新特征(2)

JDK5.0的11个主要新特征(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

1.3 受限泛型

作者:中国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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章