泛型通配符的使用
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);
}
}