2021.5.20笔记 泛型


泛型图解

在这里插入图片描述


使用泛型的优缺点

1.使用泛型
好处:避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型;把运行期异常(代码运行后会抛出的异常),提升到了编译期(写代码时候会报错)
弊端:泛型是什么类型,只能存储什么类型的数据

public class FloodType {
    public static void main(String[] args) {
        ArrayList<String> arr1 = new ArrayList<>();
        arr1.add("小新");
        arr1.add("妮妮");
        Iterator<String> iter1 = arr1.iterator();
        while (iter1.hasNext()) {
            String s1 = iter1.next();
            System.out.println(s1.length());
        }
    }
}

2.不使用泛型
好处:不使用泛型,默认类型是Object类型,可以存储任意类型的数据
弊端:不安全,会引发异常

public class FloodType {
    public static void main(String[] args) {
        ArrayList arr1 = new ArrayList();
        arr1.add("小新");
        arr1.add(1);
        Iterator iter1 = arr1.iterator();
        while (iter1.hasNext()) {
            Object next1 = iter1.next();
            System.out.println(next1);

            String s1 = (String)next1;      //抛出异常
            System.out.println(s1.length());       
        }
    }
}

含有泛型的类

可以模拟ArrayList集合
当我们不确定数据类型的时候,可以用泛型
创建对象时候确定泛型的数据类型

public class FloodClass<E> {
    private E name;

    public E getName() {
        return name;
    }

    public void setName(E name) {
        this.name = name;
    }
}
public class FloodType2 {
    public static void main(String[] args) {
        FloodClass<Integer> flood1 = new FloodClass<>();
        flood1.setName(1);
        Integer name1 = flood1.getName();
        System.out.println(name1);
        FloodClass<String> flood2 = new FloodClass<>();
        flood2.setName("小新");
        String name2 = flood2.getName();
        System.out.println(name2);
    }
}

含有泛型的方法

定义含有泛型的方法,泛型定义在方法的修饰符和返回值类型之间

格式:修饰符<泛型> 返回值类型 方法名(参数列表(使用泛型)){
…方法体
}
含有泛型的方法,在调用方法的时候确定泛型的数据类型,传递什么类型的参数,泛型就是什么类型

public class GenericScr {
    public <E> void method01(E e) {
        System.out.println(e);
    }
    public static <M> void method02(M m) {
        System.out.println(m);
    }
}
public class GenericClass {
    public static void main(String[] args) {
        GenericScr src = new GenericScr();
        src.method01("小新");
        src.method01(1);
        GenericScr.method02("妮妮");
        GenericScr.method02(2);
    }
}

含有泛型的接口

在这里插入图片描述

public interface GenericInterface<I> {
    public abstract void method(I i);
}
public class InterfaceClass implements GenericInterface<String>{
    @Override
    public void method(String o) {
        System.out.println(o);
    }
}
public class InterfaceObj {
    public static void main(String[] args) {
        InterfaceClass inter = new InterfaceClass();
        inter.method("小新");
    }
}

在这里插入图片描述

public interface GenericInterface<I> {
    public abstract void method(I i);
}
public class InterfaceClass<I> implements GenericInterface<I>{
    @Override
    public void method(I i) {
        System.out.println(i);
    }
}
public class InterfaceObj {
    public static void main(String[] args) {
        InterfaceClass<String> inter1 = new InterfaceClass<>();
        inter1.method("小新");

        InterfaceClass<Integer> inter2 = new InterfaceClass<>();
        inter2.method(10);
    }
}

泛型通配符

在这里插入图片描述
在这里插入图片描述

public class NewObj {
    public static void main(String[] args) {
        ArrayList<String> arr1 = new ArrayList<>();
        arr1.add("小新");
        arr1.add("妮妮");
        ArrayList<Integer> arr2 = new ArrayList<>();
        arr2.add(1);
        arr2.add(2);
        method(arr1);
        method(arr2);
    }
    public static void method(ArrayList<?> list) {
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next);
        }
    }
}

在这里插入图片描述
(可以看懂即可)

在这里插入图片描述

JSONUtil.toBean方法是hutool工具包中的一个方法,用于将JSON字符串转换为指定类型的Java对象。在引用\[1\]中的示例代码中,使用了JSONUtil.toBean方法将一个JSON字符串转换为MyResponse<MyObj>类型的对象。该方法接受三个参数:JSON字符串、TypeReference对象和一个布尔值。其中,TypeReference对象用于指定要转换的目标类型,布尔值用于指定是否开启严格模式。 在引用\[1\]中的示例代码中,通过JSONUtil.toBean方法将JSON字符串"{\"msg\":\"msg\", \"data\":{\"name\":\"bb\"}}"转换为MyResponse<MyObj>类型的对象。其中,MyResponse是一个泛型类,包含了一个msg属性和一个data属性,而MyObj是一个普通的Java类,包含了一个name属性。通过JSONUtil.toBean方法的调用,可以将JSON字符串中的数据解析为对应的Java对象。 总结起来,JSONUtil.toBean方法是用于将JSON字符串转换为指定类型的Java对象的方法,可以通过指定泛型来实现对复杂对象的转换。 #### 引用[.reference_title] - *1* [2021-06-07 字符串转含泛型的对象](https://blog.csdn.net/qq_42130098/article/details/117658152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [JSON与泛型的结合(大幅度减小工作量)-巧用工具类](https://blog.csdn.net/lueeast/article/details/60761414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值