原创 原创java连载--泛型(4)

2008-11-10 22:20 2964 11 11 分类: 软件与OS

受限的类型参数(Bounded Type Parameters)


       有时候,我们要限制传递给类型参数的具体参数。例如,对数进行操作的方法就只能接受Number或者其子类的对象作为改方法的参数,而不能接受其他类型的参数。这也就是要对参数类型进行限制的原因。


       在申明一个类型参数的时候,如果在类型参数名后跟着extends关键字,而extends关键字后面又跟着类型参数的上限(upper bound),例如这个上限可以是个数类Number,那么这个被申明的类型参数就是一个受限的参数类型。需要注意的是,这里的extends关键字可以是普通意义上类“继承”的意思,也可以是接口上“实现”的意思。


/**


 * This version introduces a bounded type parameter.


 */


public class Box<T> {


    private T t;         


    public void add(T t) {


        this.t = t;


    }


    public T get() {


        return t;


    }


    public <U extends Number> void inspect(U u){


        System.out.println("T: " + t.getClass().getName());


        System.out.println("U: " + u.getClass().getName());


    }


    public static void main(String[] args) {


        Box<Integer> integerBox = new Box<Integer>();


        integerBox.add(new Integer(10));


        integerBox.inspect("some text"); // error: this is still String!


    }


}


       如上代码所示,U就是一个受限的类型参数,只能向其传递Number类或者Number子类的参数。如果对上面的代码进行编译的时候,就会报错,原因就是调用inspect方法的时候向其传递了一个String的参数"some text"


       在定义受限类型参数的时候,如果还想要实现接口的话,就可以将要实现的接口使用&字符连接在类型参数上限(upper bound)的后面,如下所示:


       <U extends Number & MyInterface>


       要想实现多个接口的话,就用&依次将要实现的接口跟在后面就可以了,如下:


       <U extends Number & MyInterface1 & MyInterface2 … >

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条