java 7 泛型_Java学习之路(七):泛型

泛型的概述和基本使用

作用:把类型明确的工作推前到创建对象或者调用方法的时候

泛型是一种参数化类型,把类型当做参数一样传递来明确集合的元素类型

泛型的好处

提高安全性

省去强转的麻烦

泛型的基本使用

声明集合泛型的格式:List li = new ArrayList();

<>中存放的必须是引用数据类型

泛型的注意事项

默认声明一个泛型集合,前后的类型要一致

jdk1.7以上的新特性:在声明泛型类型的时候可以只声明前面的泛型(菱形泛型)

集合声明泛型:代表此类或者子类都可以成为集合的元素

声明的泛型类型一定要是引用类型

泛型ArrayList的遍历

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagelesson03;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;public classDemo01 {public static voidmain(String[] args){

List li = new ArrayList();

li.add("A");

li.add("B");

li.add("C");

Iterator iterator =li.iterator();while(iterator.hasNext()){

System.out.println(iterator.next());

}

}

}

第一种:String

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagelesson03;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;public classDemo01 {public static voidmain(String[] args){

List li = new ArrayList();

li.add(new Student(11,"null11"));

li.add(new Student(22,"null22"));

li.add(new Student(33,"null33"));

li.add(new Student(44,"null44"));for(Student fo:li){

System.out.println(fo);

}

}

}classStudent{intage;

String name;public Student(intage, String name) {super();this.age =age;this.name =name;

}publicStudent() {super();//TODO Auto-generated constructor stub

}

@OverridepublicString toString() {return "Student [age=" + age + ", name=" + name + "]";

}

}

第二种:Object

泛型类

定义格式:

public class 类名          注意:这里可以有多个,但不建议

我们一般写成  public class 类名

注意事项:

泛型类型必须是引用类型

T的值是在创建对象的时候出现的

泛型方法

定义格式:

public 返回类型 方法名(泛型类型 变量名)

注意:对象方法的泛型参数要与类中的泛型一致,不可以使用其他的名字

顺便补充:

泛型方法的定义:

public 返回类型(T) 方法名(泛型类型T 变量名)

具体的例子:

class Student{ //泛型类

private T o; //泛型属性

publicT getO() {returno;

}public voidsetO(T o) {this.o =o;

}public void fun1(T f1){} //泛型方法,无参数

public T fun2(int val){ //泛型方法,有参数

return null;

}

}

泛型接口

其实也就是:

public interface 接口名

使用场景:Dao (数据访问层)

泛型的高级使用(通配符)

>   表示任意类型,如果没有明确表示,那么就是Object以及任何java类

一般是在传入参数的时候用的,表示接受任何类型

? extends E   向下限定,E以及其子类

addAll方法,如果T是一个父类,那么添加的列表可以是子类,但是被添加的类表不能是子类

? super E  向上限定,E以及其父类

增强for循环

简化数组和Collection集合的遍历

格式:

for(元素数据类型  变量:数组或者Collection集合){

使用变量即可,这个变量就是数组或者Collection集合中的元素

}

其实在之前的ArrayList遍历中使用的便是增强for循环

注意:增强for循环不能边遍历,边删除元素,增强for循环的内部还是调用了

可变参数

定义方法的时候不知道我们该定义多少个参数。

格式:

修饰符  返回值类型  方法名(数据类型...变量名){}

注意事项:

这里的变量在内部就封装成了一个数组

如果一个方法有可变参数,并且有多个参数,可变参数要放在最后面

补充:

Arrays工具类的asList()方法的使用

List li = Arrays.asList("A","B","C");

System.out.println(li);

在Arrays工具类的asList方法中就是使用了可变参数

Collection中的toArray(T[] a)将泛型转化为数组

packagelesson05;importjava.util.ArrayList;importjava.util.List;public classDemo01 {public static voidmain(String[] args) {

List li = new ArrayList();

li.add("A");

li.add("B");

li.add("C");

String[] arr= new String[3];

li.toArray(arr);for(String fo:arr){

System.out.println(fo);

}

}

}

接下类是一个小例子

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagelesson06;//一个例子//学生类//班级集合//学校集合

importjava.util.ArrayList;importjava.util.List;public classDemo1 {public static voidmain(String[] args) {

List class_li = new ArrayList();

class_li.add(new Student(1,"null1"));

class_li.add(new Student(2,"null2"));

class_li.add(new Student(3,"null3"));

class_li.add(new Student(4,"null4"));

List> school_list = new ArrayList>();

school_list.add(class_li);for(Listclass_item:school_list){for(Student stu_item:class_item){

System.out.println(stu_item);

}

}

}

}classStudent{intage;

String name;publicStudent() {super();

}public Student(intage, String name) {super();this.age =age;this.name =name;

}

@OverridepublicString toString() {return "Student [age=" + age + ", name=" + name + "]";

}

}

List嵌套List

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值