指定一个数据容器(通常指集合类)所存储的数据类型。2.泛型的类型:
集合的泛型:指定/获取某个确定的未知类型。3.泛型的传递方式:
1.类型指定。在类型后面指定。例如
//创建一个学生类
package com.situ.chapter1;
public class Student {
private int id;
private String name;
private String sex;
public String classname;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", classname=" + classname + "]";
}
}
//创建main方法
package com.situ.chapter1;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Test1 {
public static void main(String[] args) {
Student st = new Student();//声明一个学生
// TODO 自动生成的方法存根
ArrayList list1 = new ArrayList();
ArrayList list = new ArrayList<>();//自动根据前面参数推断
Set set = new HashSet<>();//set的泛型声明
Map map= new HashMap<>();//map的泛型声明
st.setId(1);//设置学生这个对象的值
st.setName("文");
st.setSex("男");
st.setClassname("18软01");
list1.add(st);
for(Student i:list1) {
System.out.println(i);
}
}
}
2.通过方法来传递:在方法返回值的前面指定泛型。
package com.situ.chapter1;
public class Fruit {
}
package com.situ.chapter1;
public class Orange extends Fruit {//继承水果类
}
package com.situ.chapter1;
public class Apple extends Fruit {//继承水果类
}
package com.situ.chapter1;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Test {
public static void main(String[] args) {
// 声明?所代表类型的上限
List extends Fruit> list3 = T.makeList(3);
List super Apple> list4 = new ArrayList();
list4 = new ArrayList();
list4 = new ArrayList
package com.situ.chapter1; public class MyArrayList{ private Object[] objects = new Object[10]; private int idx = 0; public void add(T object) { objects[idx] = object; } }
package com.situ.chapter1;
import java.util.ArrayList;
import java.util.List;
public class T {
public static List makeArray() {
List e = new ArrayList<>();
return e;
}
public static List extends Fruit> makeList(int n) {
if (n % 2 == 0) {
List apples = new ArrayList();
return apples;
} else {
List apples = new ArrayList();
return apples;
}
}
}
3.特别的泛型使用方式
泛型中的? : 通配符,表示一种未知但明确的类型。
ArrayList > list3 = new ArrayList<>();//可以使用?号,表示存在,但是类型不明确
泛型中的extends 和 super关键字:
? extends T ,也可以明确?的类型
ArrayList extends Student> list2 = new ArrayList<>();//继承Student 但是不知道的类型
? super T ,也可以明确?的类型
List super Apple> list4 = new ArrayList();
? extends T 只能取数据,不能存数据
//list2如果存数据找不到?的明确类型,找不到这个水果到底是啥,无法存数据 //倒是可以取出数据,取出的必然是水果 List extends Fruit> list2 = new ArrayList(); list2 = new ArrayList (); Fruit f = list2.get(0);
? super T 只能存数据,只能存T类型
//放水果只能放水果的共性,无法放入特性 //找水果就会出现错误,水果类型不明确 List super Apple> list4 = new ArrayList(); list4 = new ArrayList (); list4 = new ArrayList



