写点什么

JDK 的泛型如何工作的

用户头像
卢卡多多
关注
发布于: 21 小时前
JDK的泛型如何工作的

JDK 1.5 中出现了泛化的类型的概念:

--泛型:表示泛化的类型


泛化--泛指一些后面加上类型;我们开始使用--

实例:

我们开始使用的瓶子,但是生产厂家却不知道他们的用处是什么,比如我想要啤酒瓶,


厂家生产的瓶子--缺少一个具体的标签是对比与商品的,不确定里面装的是什么东西,容器里面存储的东西,但是东西却不知道具体是什么


2.联系到 JAVAJDK 的集合类型,我们可以建立很多的集合,但是具体使用的集合里面存的数据五花八门的--统一的 object,但是具体的八种类型却不得而知



我们从上述直接可以看出来,数据是直接可以遍历出来,但是要得到具体的属性


object-->String -->字符串的长度;


通过一个特定的标识-表示容器中存在数据的类型----泛型

泛型分为类型形参和类型实参

形参和实参-----是对于具体的数据标志和传输的值来确定的;

2.泛型的好处

首先,我们可以建立泛型之后,避免类型转化问题,其次确定类型之后,别的类型进入不了容器中;


安全:只有符合类型的数据才能进入容器中;避免类型转化:


3.泛型的实现方式

(1)泛型接口、泛型类


public interface<E> 接口名
复制代码


public interface Collection<E>
复制代码




import org.junit.Before;import org.junit.Test;
/** * @author lucas * @time 2021/8/15/17:02 * @description **/public class Test1 { @Test public void test4234(){ //语文老师 Studentdb<Integer> china =new Studentdb<>(); china.name="玛丽"; china.score=66; System.out.println("学生名字"+china.name); System.out.println("学生的成绩"+china.score+"test3424"); } @Before public void test011111(){ //语文老师 Studentdb<String> china =new Studentdb<>(); china.name="玛丽"; china.score="优秀"; System.out.println("学生名字"+china.name); System.out.println("学生的成绩"+china.score+"test111"); } @Test public void test02(){ //语文老师 Studentdb<Character> china =new Studentdb<>(); china.name="玛丽"; china.score='A'; System.out.println("学生名字"+china.name); System.out.println("学生的成绩"+china.score+"test02"); } @Before public void test04(){ //语文老师 Studentdb<Character> china =new Studentdb<>(); china.name="玛丽"; china.score='A'; System.out.println("学生名字"+china.name); System.out.println("学生的成绩"+china.score+"test04"); }
/** * 鉴于不同的老师会给学生不一样的类型分数-我们可以采用泛型类的方式 * 进行数据统一标准,然后直接实现 * @param <T> */ //泛型一般放在名字之后 class Studentdb<T>{ private String name; private T score;

}
interface db<E>{ int size(); int age(); }}
复制代码


可以输出不同的数据来证明 class--有点策略模式的东西;

当在同一个类别中,一个属性的类型重复变化导致数据的类型变化

----我们可以将这种来使用我们策略模式来表示


好处:


(1)便于管理,安全性,只有合格的数据才能进入


(2)避免类型转化和强引用的



最普通的,我们集合类的父接口--collection--是一个抽象的接口;


这就是最标准的一个  public interface Collection<E>


如何成为一个使用泛型接口


   class  teacher extends  Studentdb<String>{      //继承泛型的类。实现泛型的接口        //    public abstract class AbstractCollection<E> implements Collection<E>    }
复制代码


注意事项:


泛型的实参是一个引用的数据类型和简单的-


                Map<String,Object> dataMap=new HashMap();
复制代码


泛型类适用的范围:


(1)适用于返回值,参数,局部变量等;


(2)不能使用在静态的方法或者是属性中(static 中);


表示数据中的


我们可以指定 T 的类型,加上具体的范围,比如数字,(整数,小数)


  class Studentdb<T extends Number>{     private    String  name;     private  T  score;    }
复制代码



如果没有按照泛型形参给予--,我们就建立泛型,默认是 object;



卢卡总结

泛型,表示标准的接口中或者参数传递中的标准,


既然是标准那就是多种情况,多种形式都可以用到的;


public class  Result<T>{
//codeprivate integer code;
//消息 private String message;
//数据 T data;
}
复制代码


上述是一个基本的标准返回类

发布于: 21 小时前阅读数: 5
用户头像

卢卡多多

关注

努力寻找生活答案的旅途者 2020.04.12 加入

公众号:卢卡多多,欢迎一起交流学习

评论

发布
暂无评论
JDK的泛型如何工作的