这个是我一边听b站上黑马程序员的课程,一边随便记得一些重点,如果想系统学习的同学,还是别看了耽误时间,推荐B站学习
泛型
泛型概述
泛型:是jdk5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型,它的本质是参数化类型
,也就是说所操作的数据类型被指定为一个参数
参数化类型
:将类型由原来的具体类型参数化,然后在使用/调用时传入具体的类型
好处:将运行时期的问题提前到了编译时期,避免了强制类型转换
泛型类
为什么要有泛型类?我比较浅显的理解是当我们定义一个类的时候,我们定义一个String类型的成员变量以及set,get方法,于是当我们调用这个类创造对象的时候,我们传入的参数只能是String类型的,否则就会报错。如果我们想传入其他类型的参数的时候就必须在创建一个类,这是麻烦的。
但是如果我们使用泛型类
//泛型类
public class Genericity<T> {
private T t;
public void setT(T t) {
this.t = t;
}
public T getT(){
return t;
}
}
//测试类
public class Test {
public static void main(String[] args) {
Genericity<String> s = new Genericity<>();
s.setT("123");
Genericity<Integer> i = new Genericity<>();
i.setT(1);
}
}
泛型方法
public 返回值类型 方法名(T t){};
public class Genericity {
public<T> void show(T t){
System.out.println(t);
}
}
public class Test {
public static void main(String[] args) {
Genericity g =new Genericity();
g.show("123");
g.show(12.34);
g.show(true);
}
}
泛型接口
//接口
public interface Gene<T> {
void show(T t);
}
//实现类
public class GeneImpl<T> implements Gene<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
类型通配符
为了表示各种泛型List的父类,可以使用类型通配符
- <?> :可以匹配任意类型
- <? extends 类型>:可以使用的类型通配符的上限
- <? super 类型>:可以使用类型通配符的下限
可变参数
如果我们包含可变参数与不变参数,可变参数要放在最后面
public static void sum(int b,int... a)
可变参数的使用
- Arrays工具类中有一个静态的方法:
public static List asList(T… a):返回由指定数组支持的固定大小的列表 - List接口中有一个静态的方法:
public static List asof(E… elements):返回包含任意数量元素的不可变列表 - Set接口中有一个静态的方法:
pubilc static Set of(E… elements):返回一个包含任意数量元素的不可变集合
import java.util.*;
//Arrays
public class Test {
public static void main(String[] args) {
List<String> list = Arrays.asList("hello", "world", "java");
/*下面两行会产生报错,因为这个列表得大小的固定的,但是增加与删除会改变列表得
大小,所以会产生报错*/
//list.add("123");//UnsupportedOperationException
//list.remove("java");//UnsupportedOperationException
list.set(1,"nihao");
System.out.println(list);
}
//List
import java.util.*;
public class Test {
public static void main(String[] args) {
List<String> list = List.of("hello", "world", "java");
//增删改都不可以
list.add("world");//UnsupportedOperationException
list.remove("java");//UnsupportedOperationException
list.set(1,"nihao");//UnsupportedOperationException
System.out.println(list);
}
}
//set
import java.util.*;
public class Test {
public static void main(String[] args) {
Set<String> se = Set.of("hello", "world", "java");
//不能使用增删方法,本身没有修改方法
se.add("123");//UnsupportedOperationException
se.remove("java");//UnsupportedOperationException
System.out.println(se);
}
}