泛型的使用
1.jdk 5.0新增的特性
2.在集合中使用泛型:
总结:
1.集合框架或集合类在jdk5.0时都修改为带泛型的结构。
2.在实例化集合类时,可以指明具体的泛型类型
3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法、结构、构造器、属性)使用到类的泛型的位置,都指定为实例化的泛型类型。
比如:add(E e)--->实例化以后:add(Integer e)
4.注意点:泛型的类型必须是类,不能是基本数据类型。需要用基本数据类型的位置,拿包装类替换
5.如果实例化时,没有指明泛型的类型。默认类型为java.lang.Object类型
举例:
@Test//已ArrayList为例
public void test1(){
ArrayList<Integer> list = new ArrayList<>();
list.add(98);
list.add(95);
list.add(78);
list.add(84);
list.add(67);
list.add(100);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
int integer = iterator.next();
System.out.println(integer);
}
}
@Test//已HashMap为例
public void test2(){
HashMap<String, Integer> map = new HashMap<>();
map.put("Tom",12);
map.put("Jerry",16);
map.put("Mike",17);
map.put("Wang",23);
map.put("Ross",18);
Set<Map.Entry<String, Integer>> entries = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
while (iterator.hasNext()){
Map.Entry<String, Integer> entry = iterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key+"----->"+value);
}
}
3.泛型类
如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型
要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型
Order order = new Order();
order.setOrderT("ABC");
order.setOrderT(123);
建议:实例化时指明类的泛型
Order<String> order1 = new Order<>();
order1.setOrderT("Order:AA");
4.泛型方法
泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。
换句话说,泛型方法所属的类是不是泛型类都没有关系。
泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定
5.泛型在继承方面的体现
虽然类A是类B的父类,但是G<A>是G<B>二者不具备子父类关系,二者是并列关系
补充:类A是类B的父类,A<G>是B<G>的父类
6.通配符的使用
通配符:?
类A是类B的父类,G<A>和G<B>是没有关系的,二者共同的父类是:G<?>
添加(写入):对于List<?>就不能向其内部添加数据(除null之外)
获取(读取):允许读取数据
@Test
public void Test1(){
List<Object> list1 = null;
List<String> list2 = null;
List<?> list = null;
list = list1;
list = list2;
print(list1);
print(list2);
}
public void print(List<?> list){
Iterator<?> iterator = list.iterator();
while (iterator.hasNext()){
Object next = iterator.next();
System.out.println(next);
}