泛型 笔记

泛型

泛型 笔记_第1张图片
泛型 笔记_第2张图片

泛型的好处

Collection c = new ArrayList();//创建集合对象
//添加元素 没有指定类型的时候默认是Object类型   字符串赋给object类型时向上转型
c.add("hello");
c.add("World");
c.add("java");
c.add(100);//加了这个报错,存储的时候是Integer类型,结果在下面强转成了String类型,会出现ClassCastException,这个时候采用泛型解决,看下面
//遍历集合
Iterator it = c.iterator();
while(it.hasNext()){
    Object obj = it.next();//添加的时候是object类型,所以只能是object类型,
    //不想要object类型,因为输入是String类型 ,所以向下转型
    String s = (String)it.next();
    sout(obj);
    sout(s);
}

泛型 笔记_第3张图片

//Collection c = new ArrayList();//创建集合对象
//添加元素 没有指定类型的时候默认是Object类型   字符串赋给object类型时向上转型

Collection c = new ArrayList();//这样就是只能加String类型,int再写的时候就会报错
c.add("hello");
c.add("World");
c.add("java");

//c.add(100);//加了这个报错,存储的时候是Integer类型,结果在下面强转成了String类型,会出现ClassCastException,这个时候采用泛型解决
//遍历集合
Iterator it = c.iterator();
while(it.hasNext()){
    //Object obj = it.next();//添加的时候是object类型,所以只能是object类型,
    //不想要object类型,因为输入是String类型 ,所以向下转型
    String s = it.next();//就不需要转换了
    sout(obj);
    sout(s);
}

泛型 笔记_第4张图片

泛型类

泛型 笔记_第5张图片
泛型 笔记_第6张图片

Student s = new Student();
s.setName("林青霞");
sout(s.getName());

Teacher t = new Teacher();
t.setAge(30);
sout(s.getAge());

泛型 笔记_第7张图片

//定义一个泛型类Generic
private T t;
alt+insert 生成get set方法

泛型 笔记_第8张图片

//泛型类
Generic g1 = new Generic();
g1.setT("林青霞");
sout(g1.getT());

Generic g2 = new Generic();
g2.setT(30);
sout(g2.getT());

Generic g3 = new Generic();
g3.setT(true);
sout(g3.getT());

泛型 笔记_第9张图片

泛型方法

泛型 笔记_第10张图片
上面是方法名相同,参数类型不同是方法重载
泛型 笔记_第11张图片
用泛型类改进

public class Generic{
    public void show(T t){
        sout(t);
    }
}
//测试
Generic g1 = new Generic();
g1.show(t:"林青霞");

Generic g2 = new Generic();
g2.show(t:30);

Generic g3 = new Generic();
g3.show(t:true);

泛型 笔记_第12张图片
上面那个例子用泛型方法改进

public class Generic{
    public void show(T t){
        sout(t);
    }
}

//测试
Generic g = new Generic();

g.show(t:"林青霞");

g.show(t:30);

g.show(t:true);

g.show(t:12.34);
//你输入了什么类型就返回什么类型

泛型 笔记_第13张图片

泛型接口

泛型 笔记_第14张图片
泛型接口
泛型 笔记_第15张图片
因为接口无法实例化,所以需要给出泛型接口的实现类

public class GenericImpI implements Generic{
    @Override
    public void show(T t){
        sout(t);
    }
}
//测试
Generic g1 = new GenericImpI();
g1.show(t:"林青霞");

Generic g2 = new GenericImpI();
g2.show(t:30);

Generic g3 = new GenericImpI();
g3.show(t:true);

类型通配符

泛型 笔记_第16张图片

//类型通配符
List list1 = new ArrayList();
List list2 = new ArrayList();
List list3 = new ArrayList();
//表示任意类型的list的集合 
 

泛型 笔记_第17张图片

//类型通配符上限 限定的是最大的类型
List list4 = new ArrayList();
List list5 = new ArrayList();
//类型通配符下限 限定的是最小的类型
List list6 = new ArrayList();
List list7 = new ArrayList(); 
 

泛型 笔记_第18张图片

可变参数

就是参数个数可变,用作方法的形参出现
泛型 笔记_第19张图片
泛型 笔记_第20张图片
由上图可以看出可变参数把方法输入的每一个参数的数据都封装到一个数组里去了,上面的那个int…a的那个a实际上是一个数组,所以就相当于return数组中的元素和,也就是给数组元素求和
泛型 笔记_第21张图片
定义一个求和sum,然后用增强for遍历数组求和
如果方法中包含多个参数,应该把可变参数放在后面,放在前面会报错,这样的话第一个参数就会给了b,后面的参数就会封装到a里
泛型 笔记_第22张图片

注意事项

泛型 笔记_第23张图片

可变参数的使用

泛型 笔记_第24张图片

//测试
//Array的返回由指定数组支持的固定大小的列表
List list = Array.asList("Hello","World","Java");

list.add("javaee");//会报错 UnsupportedOperationException 也就是不支持请求的操作 也就是说添加操作不允许

list.remove(o:"Hello");//会报错 UnsupportedOperationException 也就是不支持请求的操作 也就是说添加操作不允许

list.set(1:"javaee");//不会报错 也就是可以修改内容,但是不能添加删除元素
//因为添加删除元素会修改集合的大小,而这个是固定大小的列表
sout(list);

泛型 笔记_第25张图片

//测试
//List的返回包含任意数量元素的不可变列表
List list = List.of("Hello","World","Java","World");//list集合可以有重复元素

list.add("javaee");//会报错 UnsupportedOperationException 也就是不支持请求的操作 也就是说添加操作不允许

list.remove(o:"Hello");//会报错 UnsupportedOperationException 也就是不支持请求的操作 也就是说添加操作不允许

list.set(1:"javaee");//会报错 UnsupportedOperationException 也就是不支持请求的操作 也就是说添加操作不允许
//也就是说通过list得到的增删改都不行
sout(list);

泛型 笔记_第26张图片
泛型 笔记_第27张图片

//测试
//Set的返回包含任意数量元素的不可变集合
Set set = Set.of("Hello","World","Java","World");//没有后面那个world不会报错,有了后面那个world会报错IllegalArgumentException 也就是非法或不正确的参数,因为set集合不允许有重复元素


Set set = Set.of("Hello","World","Java");

set.add("javaee");//会报错 UnsupportedOperationException 也就是不支持请求的操作 也就是说添加操作不允许

set.remove(o:"Hello");//会报错 UnsupportedOperationException 也就是不支持请求的操作 也就是说添加操作不允许

//也就是说通过set得到的增删都不行
sout(set);

泛型 笔记_第28张图片

你可能感兴趣的:(java)