Java基础(泛型的理解)

一、泛型概述

泛型的本质是参数化类型,也就是说所操作的 数据类型被指定为一个参数类型。

二、泛型类

定义泛型类在"类名"后添加一对<>,里面定义"泛型名称";

格式:如ArrayList集合

示例:

class ArrayList<E> {
	public boolean add(E e) { }
	public E get(int index) { }
}

使用泛型类:创建对象时,确定泛型的类型

例如:ArrayList<String> list = new ArrayList<String>(); 此时相当于将E的类型替换为String类型。

三、集合中使用泛型

使用泛型,规定集合元素类型必须为某种类型

示例:

        List<String> list=new ArrayList<>();
        list.add("yyy");
        list.add("wtc");
        for(int i=0;i<list.size();i++){
            String s=(String)list.get(i);
            System.out.println("获取的值为:"+s);
        }
        //aslist:将多个数据转成集合
        List<Integer> list1 = Arrays.asList(1, 2, 3);
        List<String> list2 = Arrays.asList("y", "w", "a");

四、泛型方法

定义格式:修饰符 <表示泛型方法> 返回值类型 方法名(泛型标示符 参数名称){}

示例:

mport java.util.ArrayList;
import java.util.List;

public class demo_泛型方法 {
    public static void main(String[] args) {
        //任何同类型的数据类型都可以,不在局限于只能传一种类型的数据
        List list=ArrayTools.toList("w","y");
        System.out.println(list);
        List list1=ArrayTools.toList(1,2,3);
        System.out.println(list1);
    }
}
class ArrayTools{
           //...表示参数个数任意即可变参数
    public static <T> List toList(T...e){
        List<T> list=new ArrayList<>();
        for(int i=0;i<e.length;i++){
            list.add(e[i]);
        }
        return list;
    }
}

运行结果:

五、泛型接口

格式:权限修饰符 interface 接口名<泛型标示符>{}

示例:

public class demo_泛型接口 {
    public static void main(String[] args) {
        Inter<String> inter=new InterImpl();
    }
}
interface Inter<T>{
    T getData(T t);
}
class InterImpl<T> implements Inter<T>{
    @Override
    public T getData(T s) {
        return null;
    }
}

六、泛型通配符

类型通配符一般是使用?代替具体的类型参数。

例如 List<?> 在逻辑上是List<String>,List<Integer> 等所有List<具体类型实参>的类。

示例:

import java.util.ArrayList;
import java.util.List;

public class demo_泛型通配符 {
    public static void main(String[] args) {
       List<String> strings=new ArrayList<>();
       m1(strings);
       List<Person> people=new ArrayList<>();
       List<Student> students=new ArrayList<>();
       List<Teacher> teachers=new ArrayList<>();
       m2(people);
       m2(students);
       m3(people);
       //m3(teachers);报错
    }
    //任何类型的参数都可以
    public static void m1(List<?> list){}
    //list的类型只能是Person以及Person的子类
    public static void m2(List<?extends Person> list){}
    //只能是Student类型或者是Student的父类类型
    public static void m3(List<?super Student> list){}
}
class Person{}
class Student extends Person{}
class Teacher extends Person{}

七、使用泛型的好处

可以让您消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的键或值保存在集合中。这就是泛型所做的工作。

  1. 类型安全
  2. 消除强制类型转换
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值