泛型常用的几部分内容:
一,泛型应用在方法,类,接口。分别叫做泛型类,泛型方法,泛型接口。
泛型类,在类上声明 ,表示使用泛型。
泛型方法: 在访问符后面添加 ,表示这个方法使用泛型类型。
泛型接口 : 也是添加 , 表示用的是泛型,和泛型类相似。
二,泛型类型通配符 “?”
(1)实参是通配符 ? : List< ? > list = new ArrayList(); 这个问号就是通配符。对于使用通配符声明的对象,它只能读取,不能往里面添加内容。
(2)泛型上限 : extends E> : 上限是E,及其子类。可允许加入到集合中。
(3)泛型下限 : super E > 下限是E, 及其父类。可允许加入到集合中。
三,可变参数 …
如果还有别的参数, 可变参数的位置应该放在参数列表的最后。
因为可变参数的本质还是一个数组,将后面的数据当作一个数组进行封装接收。
JDK应用案例 : Arrays.asList 这个生成的list 不能增加,或者删除数据,会产生异常错误。
1,泛型类: 如下就是一个泛型类。 泛型的标识符必须是< >,中间的字母可任意。
//解释: <T> 表示该类使用泛型。
public class Container <T>{
//参数类型使用泛型, 返回值是泛型指定的类型。
public T getValue(T t){
return t;
}`在这里插入代码片`
}
2,泛型接口:泛型的标识符必须是< >,中间的字母可任意。
public interface GenericInterface<T> {
//这里这个参数类型T, 是和接口的T对应的。属于泛型接口
//检验方法: 可以摁住ctrl键, 鼠标点击参数类型T, 高亮的是接口的T高亮。
public void getValue(T t);
}
3,泛型方法: 注意 < > 的位置,是在方法的public 后面加上。
泛型方法和泛型类使用区别在哪?
泛型方法更加灵活,每次调用泛型方法都可以传入不同的类型。
public class GenericityMethod {
//在访问符后面添加 <T> ,表示这个方法使用泛型类型。
//可根据传入的参数类型的不同设定。
public <T> void show(T t){
System.out.println(t);
}
public <T> T getValue(T t){
return t;
}
}
使用通配符 ?声明的实参的泛型集合,无法往里面添加内容,也不能删除内容。那有何用呢?相当于设置一个固定的集合,例如:
public class Test {
public static void main(String[] args) {
List<?> list = Arrays.asList("zhangsan","lisi",1);
System.out.println(list);
}
}

实际上可变参数 … ,就是一个数组。可以把下面的例子中的形参b,进行输出,得到的是一个内存地址。
public class TestParameter {
public static void main(String[] args) {
int res = sum(2,1,1,1,1,1);
System.out.println(res);
}
public static int sum(int a, int... b){
int sum = 0;
for(int i = 0; i < b.length; ++i){
sum += b[i];
}
return sum;
}
}
