电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

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

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

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

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

/**

 * This version introduces a bounded type parameter.

 */

public class Box {

    private T t;         

    public void add(T t) {

        this.t = t;

    }

    public T get() {

        return t;

    }

    public 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 integerBox = new Box();

        integerBox.add(new Integer(10));

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

    }

}

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

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

      

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

      

博主
skycanny
skycanny的笔记(副站)
skycanny的笔记(副站)今天正式开通,欢迎大家的访问!同时欢迎大家访问主站http://skycanny.21ic.org 无论转贴或原创,希望对您喜欢的文章投您宝贵的一票!感谢大家的光临和支持! 现在就开始投票吧!!!   第三方统计  
点击跳转