在java中我们定义接口其实定义的是这个类的功能,在很多时候我们并不关心这个类的类型而是这个类的能力。泛型的出现让我们的代码和代码所能操作的类型不在绑定在一起,不仅可以复用代码降低耦合还可以提高代码的可读性和安全性。

首先,我们现在看一段代码来介绍一下泛型的基本概念:

public class Generic{

T one;

T two;publicGeneric(T one, T two){this.one =one;this.two =two;

}publicT getOne() {returnone;

}publicT getTwo() {returntwo;

}

}

其中Generic就是一个泛型类,T叫做类型参数。泛型就是把类型参数化,这样代码能够处理的类型可以通过参数的形式传递。在调用时可以通过:

Generic generic = new Generic(1,100);

Integer one=generic.getOne();

Integer two= generic.getTwo();

其中Integer就是传递的实际类型的参数,这样就实现了Generic类的代码和它能处理的类型的解耦。在Generic中的类型参数可以有多个,例如:

public class Generic{

K one;

V two;publicGeneric(K one, V two){this.one =one;this.two =two;

}publicK getOne() {returnone;

}publicV getTwo() {returntwo;

}public static voidmain(String[] args) {

Generic generic = new Generic(1,"hello world");

Integer one=generic.getOne();

String two=generic.getTwo();

}

}

当需要多个类型参数时用“,”隔开。

知道了如何定义泛型下面我们来介绍一下泛型的基本原理。在介绍泛型的基本原理之前我们需要先介绍一点java的基础知识。在java中有java编译器和java虚拟机其中java编译器的工作就是把我们编写的.java文件编译成java虚拟机可以识别的字节码文件。对于泛型类,java编译器会把泛型代码编译成非泛型代码,也就是说在java编译器会将类型参数擦除然后替换为Object类型然后加入必要的强制类型的转换。java虚拟机在执行的时候是完全不知道泛型的存在只知道普通的类代码和实现。

了解了泛型的基本使用方法和基本原理,可能我们会有疑问:既然如此为什么不一开始只使用普通类和Object类而要使用泛型呢?使用泛型有两个好处:1、提高代码的可读性。2、更好的安全性。如果不使用泛型而使用Object类型则需要在代码中进行强制类型转换,这样的话就会有一个问题就是有些强制类型转换在代码的编译期不会报错,但是会在代码的运行期间报错。使用了泛型可以很好的规避这种情况的发生,代码在编译期间就会报错提高了代码的安全性。

在java中除了类可以是泛型的方法也可以是泛型的。这里需要注意,在java类中泛型方法和其所在类是否是泛型无关。下面我们来先定义一个泛型方法:

public static booleancontains(T[] arrays,T param){boolean flag = false;for(T t : arrays) {if(t.equals(param)){

flag= true;break;

}

}returnflag;

}

这个方法就是一个泛型方法,其中泛型参数为T放在返回值的前面。同样的泛型方法也可以有多个泛型参数,使用“,”隔开即可。

java中什么泛型_java中的泛型(一)相关推荐

  1. java中什么时候不能用泛型_java中泛型的正确使用姿势

    image.png 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.利用好泛型,在系统架构中是一把利器. 泛型类 先看一个例子,restful架构中,需要定义api接口返回 ...

  2. java 类 方法 带泛型_java中的泛型类和泛型方法

    1.泛型是什么? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类. 可以在集合框架(Collection fram ...

  3. java基本数据类型泛型_Java中的泛型

    泛型规范在JDK1.5版本中被添加,使用泛型机制编写的代码比起随意使用Object变量然后再进行强制类型转换的代码具有更高的安全性和可读性,同时也更为简洁.泛型对于集合类尤其有用,例如 ArrayLi ...

  4. java参数传入泛型类型_Java 5.0 泛型之 使用泛型统一传入的参数类型

    Java 5.0 泛型之 使用泛型统一传入的参数类型 package Demo; // 使用泛型统一传入的参数类型 class Info28 { private T var; // 此类型由外部决定 ...

  5. java 数组 length 减少_java中数组有没有length()方法?string没有lenght()方法?

    java中数组有没有length()方法,求数组的长度可以使用数组的length属性. int length=arr.length;//求数组的长度 ------------------------- ...

  6. java如何遍历字典_Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  7. .net java 泛型_Java高级特性泛型看这一篇就够了

    作者:qwer1030274531 出自:ITPUB博客 1.为什么我们需要泛型? 通过两段代码就可以知道为什么需要泛型 /*** * 没有泛型的时候实现加法 */public class NonGe ...

  8. java变量存储位置_java 中变量存储位置的区别

    [原文] 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  9. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

最新文章

  1. 二分法典例:木棒切割问题
  2. 博客网站源代码_网站建设技术--WORDPRESS
  3. phpwind html5,PHPWIND 5.3 运行代码 功能实现代码
  4. NOI导刊模拟2—电话网络 解题报告
  5. @Retention注解
  6. 北林oj-算法设计与分析-Tom palindrome number
  7. 如何做一个国产数据库(六) 网络传输 nodejs做测试客户端
  8. 拦截器ConnectInterceptor
  9. scala 基础类库 —— 文件操作
  10. primefaces教程_Primefaces FileUpload组件示例教程
  11. 力软部署oracle,力软敏捷开发框架
  12. 西门子mag6000接线_西门子(SIEMENS)妙声力系列电磁流量计变送器MAGFLO MAG5000 MAG6000中文使用手册.pdf...
  13. ubuntu如何看到隐藏文件夹
  14. 《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》论文笔记
  15. python代码画玫瑰花_python绘制玫瑰
  16. 深度清理win10系统C盘文件(二)
  17. 登录功能的测试用例设计
  18. 负边距在布局中的使用 BY:色拉油啊油
  19. 单链表的基本操作,建立单链表,插入删除等
  20. javascript操作css实现弹出对话框

热门文章

  1. Python Base64模块的使用
  2. Keras入门之搭建回归神经网络
  3. 汉字在线转化unicode编码
  4. 大文件上传 进度条显示(仿CSDN资源上传效果) .
  5. 漫步线性代数二十三——行列式公式
  6. kettle分批处理大表数据_采用Kettle分页处理大数据量抽取任务
  7. jupyter notebook代码自动完成功能
  8. SUMIFS函数多条件求和的9个实例【转载】
  9. Ubuntu在启动器中添加自定义程序快捷方式
  10. matlab数学实验十,数学实验(MATLAB版)