泛型通配符

泛型通配符的使用

package javabasis.fanxing;


/*
* 此处讲述泛型通配符相关内容
*
* 三种
* ?
* ? extends E
* ? super E
* */

import org.junit.Test;

class FanXingSymbols<T> {

    private T param;

    public FanXingSymbols(T param) {
        this.param = param;
    }

    public T getParam() {
        return param;
    }

    public void setParam(T param) {
        this.param = param;
    }
}

public class NO3FanXing2 {

    @Test
    public void test(){

        FanXingSymbols<?> fanXingSymbols = new FanXingSymbols<>(123);
        fanXingSymbols.getParam();
//        fanXingSymbols.setParam(234234);
        //'setParam(capture<?>)' in 'javabasis.fanxing.FanXingSymbols' cannot be applied to '(int)'
        //无法使用set


        //构造的泛型类 必须是Number的子类, 并且只能取出不能加入.  因为在未编译时,无法判断此泛型类,指定的什么类型参数
        //符合消费者的概念 只能取 不能放
        FanXingSymbols<? extends Number > fanXingSymbols2 = new FanXingSymbols<>(123);
        fanXingSymbols2.getParam();
//        fanXingSymbols2.setParam(454545);


        //只能放入 Integer的父类 或者父类的父类
        FanXingSymbols<? super Integer > fanXingSymbols3 = new FanXingSymbols<>(123);
        //取出使用Object
        Object a = fanXingSymbols3.getParam();
        fanXingSymbols3.setParam(4545);

    }
}

posted @ 2019-05-29 16:31  生画微机  阅读(171)  评论(0编辑  收藏  举报