Java基础(2)|范型

Java基础(2)|范型

1、范型优点

1、代码简洁,不用强制转换

2、程序更加健壮(编译时期没有警告,运行时就不会出现ClassCastExpection异常)

3、可读性和稳定性(限定了类型)

2、泛型基础

类上定义的泛型,方法上也可以使用类上声明的泛型只能对非静态成员有效

public class ObjectTool<T> {
    private T obj;
    }

创建类时指定类型,使用时会自动转换

ObjectTool<String> tool = new 0bjectTool<>();

泛型先定义,后使用

//定义泛型方法..
    public <T> void show(T t) {
        System.out.println(t)
    }

类型通配符,如:参数中传递一个list集合,但不确定时什么类型。

public void test(List<?> list){}  // ? :任意类型,只能传?所代表的的类型
为什么不用list<Object>? 答:可以传所有类型进去
list<Object> 跟 List<String>毫无关系,仔细品

设定通配符上限

如:参数中传递一个list集合,但只能是(integer,short,byte,double)类型,怎么弄?

List<? extends Number>  //子类或者自身

设定通配符下限

public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }
有什么用?
假若你想比较字符串的大小,你可以传入一个比较器(Comparator<String>),也可以传入Object的比较器(Comparator比较器),
会使代码更加灵活(只要能够比较字符串的大小就行了)

总结

带有子类限定的,可以从泛型读取

带有超类限定的,可以从泛型写入

关于泛型与通配符

//使用通配符
public static void test(List<?> list) {}
//使用泛型方法
public <T> void  test2(List<T> t) {}

常用的泛型字符含义

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • ? - 表示不确定的java类型

一般怎么使用他们呢?

答:

一、泛型:

参数之间有依赖关系

返回值与参数之间有依赖关系

二、通配符

无依赖关系的

泛型擦除:泛型在编译成class文件后,会进行擦除。

应用场景

1、ElasticsearchRepository

2、SpringDataJpa

posted @   码出新生活!  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示