建站仅向商家提供技术服务,做公司企业网站标准尺寸,移动应用开发技术有哪些,网站 展示本篇文章主要说明的是类型通配符、可变参数、可变参数的使用等。
在学习之前#xff0c;希望能对泛型有个大概了解#xff0c;可参考链接 java 泛型#xff08;上#xff09;-CSDN博客
也希望对泛型类、泛型接口、泛型方法有个大概的认识及使用#xff0c;可参考链接
j…本篇文章主要说明的是类型通配符、可变参数、可变参数的使用等。
在学习之前希望能对泛型有个大概了解可参考链接 java 泛型上-CSDN博客
也希望对泛型类、泛型接口、泛型方法有个大概的认识及使用可参考链接
java 泛型中-CSDN博客 1、类型通配符
1为了表示各种泛型List的父类可以使用类型通配符。
类型通配符?List?表示元素类型未知的List它的元素可以匹配任何的类型。这种带通配符的List仅表示它是各种泛型List的父类并不能把元素添加到其中。
2如果说我们不希望List?是任何泛型List的父类只希望它代表某一类泛型List的父类可以使用类型通配符的上限。
类型通配符上限? extends 类型List? extends Number它表示的类型是Number或者其子类型
3除了可以指定类型通配符的上限我们也可以指定类型通配符的下限。
类型通配符下限? super 类型List? super Number它表示的类型是Number或者其父类型
4代码实现
看了上面的是不是有点蒙所以为了更好理解先记住这张图。 然后看代码实现
package generics;import java.util.ArrayList;
import java.util.List;public class GenericsDemo5 {public static void main(String[] args) {List? list new ArrayListObject();List? list2 new ArrayListNumber();List? list3 new ArrayListInteger();System.out.println(------------);//类型通配符上限? extends 类型//上限是Number可右边是Object所以报错// List? extends Number list4 new ArrayListObject();List? extends Number list5 new ArrayListNumber();List? extends Number list6 new ArrayListInteger();System.out.println(------------);//类型通配符下限? super 类型List? super Number list7 new ArrayListObject();List? super Number list8 new ArrayListNumber();//下限是Number可右边是Integer所以报错// List? super Number list9 new ArrayListInteger();}
}
2、可变参数
1可变参数又称参数个数可变用作方法的形参出现那么方法参数个数就是可变的了
2格式修饰符 返回值类型 方法名(数据类型.. 变量名){}
3范例public static int sum(int... a){}
4可变参数注意事项
这里的变量其实是一个数组如果一个方法有多个参数包含可变参数可变参数要放在最后。
5代码实现
package generics;import java.util.ArrayList;
import java.util.List;public class GenericsDemo6 {public static void main(String[] args) {System.out.println(sum(10, 20));System.out.println(sum(10, 20, 30));System.out.println(sum(10, 20, 30, 40));}public static int sum(int... a) {int sum 0;for (int i : a) {sum i;}return sum;}//如果有可变参数可变参数要放在后面//public static int sum(int... a,int b) {//正确
// public static int sum(int b, int... a) {
// return 0;
// }}
运行结果 3、可变参数的使用
1Arrays工具类中有一个静态方法
public static T ListT asList(T... a)返回由指定数组支持的固定大小的列表返回的集合不能做增删操作可以做修改操作
2List接口中有一个静态方法
public static E ListE of(E... elements)返回包含任意数量元素的不可变列表返回的集合不能做增删改操作
3Set接口中有一个静态方法
public static E SetE of(E.. elements)返回一个包含任意数量元素的不可变集合在给元素的时候不能给重复的元素返回的集合不能做增删操作没有修改的方法
4代码实现
package generics;import java.util.Arrays;
import java.util.List;
import java.util.Set;public class GenericsDemo7 {public static void main(String[] args) {ListString list Arrays.asList(hello, world, java);// list.add(he); // UnsupportedOperationException//list.remove(hello); // UnsupportedOperationExceptionlist.set(2, 11111);System.out.println(list);ListString list2 List.of(hello, world, java);
// list2.add(he); // UnsupportedOperationException
// list2.remove(hello); // UnsupportedOperationException
// list2.set(2, 11111);// UnsupportedOperationExceptionSystem.out.println(list2);//不能给重复元素
// ListString list3 Set.of(hello, world, java, java);SetString list3 Set.of(hello, world, java);
// list3.add(he); // UnsupportedOperationException
// list3.remove(hello); // UnsupportedOperationException//没有修改方法// list3.set(2, 11111);System.out.println(list3);}}
运行结果 本文为学习笔记所参考文章均已附上链接若有疑问请私信
创作不易如果对你有点帮助的话麻烦点个赞支持一下
新手小白欢迎留言指正