栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java的泛型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java的泛型

不使用泛型(默认Object)

在集合中不使用泛型,默认的类型就是Object。容易引发异常

        ArrayList list = new ArrayList();
        list.add("jws");
        list.add(521);
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            String s = (String) next;
            System.out.println(s.length());
        }

输出异常 ClassCastException

Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
使用泛型

将运行期异常,提升到编译期异常。

        ArrayList list = new ArrayList();
        list.add("jws");
        list.add(521);//这时再编译的时候爆红
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            String s = (String) next;
            System.out.println(s.length());
        }
含有泛型的类(创建对象的时候会确定具体的数据类型)

创建实体

//可以接收任意数据类型的实体类
public class Generic {
    private T name;
    private T age;
}

创建实体对象时确定数据类型

Generic generic = new Generic();
generic.setName(521);
含有泛型的方法(普通方法和静态方法)(调用方法时确定数据类型)

//创建含有泛型的方法

public class GenericMethod{
	//普通方法
    public  void method01(T t){
        System.out.println("含泛型的普通方法"+t);
    }
    //静态方法
    public static  void method02(T t){
        System.out.println("含泛型的静态方法"+t);
}

//使用方法

		//使用普通方法
        GenericMethod genericMethod = new GenericMethod();//创建方法对象
        genericMethod.method(521);//确定方法的类型为Inter
        genericMethod.method("jws");//确定方法的类型为Sting

		//使用静态方法
		//静态方法可以通过类型.方法名直接使用。不必创建对象使用
        GenericMethod.method(521);//确定方法的类型为Inter
含有泛型的接口(实现类确定数据类型、创建对象时确定数据类型)

//定义含有泛型的接口

public interface GenericInterface {
    public abstract void method(T t);
}

第一种实现:实现类确定数据类型

public class GenericInterfaceImpl1 implements GenericInterface {//实现接口的String类型
    @Override
    public void method(String s) {

    }
}

第二种实现:创建对象时确定数据类型

public class GenericInterfaceImpl2 implements GenericInterface {
    @Override
    public void method(T t) {
        GenericInterfaceImpl2 g2 = new GenericInterfaceImpl2<>();//创建对象时确定数据类型
    }
}
泛型通配符(不能创建对象使用,只能作为方法的参数使用)

不知道使用什么类型的时候,此时使用问号(?)表示任意数据类型,此时只能接收数据,不能往集合中存数据。

public class Demo {
    //不能创建对象使用,只能作为方法的参数使用
    public static void main(String[] args) {
        ArrayList list01 =new ArrayList<>();
        list01.add(1);
        list01.add(2);

        ArrayList list02 =new ArrayList<>();//不能创建对象使用问号
        list02.add("a");
        list02.add("b");

        method(list01);//接收任意类型数据
        method(list02);
    }
    //定义一个方法,不知道什么类型的集合,用?来接收数据类型
    public static void method(ArrayList list){//只能作为方法的参数使用
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }
    }
}
受限泛型,限定使用的数据类型(上限限定和下线限定)

主要在源码上,实际应用很少
1、上限限定,传参的类型只能是Number及其子类
2、下线限定,传参的类型只能是Number及其父类

    public static void getElement1(Collection collection) {//上限限定,传参的类型只能是Number及其子类
    
    }
    public static void getElement2(Collection collection) {//下线限定,传参的类型只能是Number及其父类
         
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361809.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号