Java 泛型

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

一. 泛型概念的提出(为什么需要泛型)?

首先,我们看下下面这段简短的代码:

public classTest{public static voidmain(String[] args) {

List list= newArrayList();

list.add("cat");

list.add(20);for (int i = 0; i < list.size(); i++) {

String name= (String) list.get(i); //标记 1

System.out.println("name:" +name);

}

}

}

我们发现此段代码编译期是正常的,但会在运行期标记1处出现“java.lang.ClassCastException”异常。

在如上的编码过程中,我们发现主要存在两个问题:

1.当我们将一个对象放入集合中,集合不会记住此对象的类型,当再次从集合中取出此对象时,改对象的编译类型变成了Object类型,但其运行时类型任然为其本身类型。

2.因此,//1处取出集合元素时需要人为的强制类型转化到具体的目标类型,且很容易出现“java.lang.ClassCastException”异常。

那么有没有什么办法可以使集合能够记住集合内元素各类型,且能够达到只要编译时不出现问题,运行时就不会出现“java.lang.ClassCastException”异常呢?答案就是使用泛型。

二.什么是泛型?

简单点说就是参数类型可变化,直接上例子:

public classTest{public static voidmain(String[] args) {//List list = new ArrayList();//list.add("cat");//list.add(20);

List list = new ArrayList();

list.add("cat");

list.add("dog");//list.add(50);//标记 1 提示编译错误

for (int i = 0; i < list.size(); i++) {

String name=(String) list.get(i);

System.out.println("name:" +name);

}

}

}

采用泛型写法后,在//1处想加入一个Integer类型的对象时会出现编译错误,通过List,直接限定了list集合中只能含有String类型的元素,从而在//2处无须进行强制类型转换,因为此时,集合能够记住元素的类型信息,编译器已经能够确认它是String类型了。

未完待续

java参数传入泛型类型_Java 泛型(参数化类型)相关推荐

  1. java参数传入泛型类型_Java泛型参数界定到任何一个类型的范围

    是否有一种语法或解决方法来将泛型类型参数限制为任何一种类型的类型? 我知道您可以将类型限制为所有类型的所有类型(即AND逻辑): public class MyClass & Serializ ...

  2. java参数传入泛型类型_java泛型方法参数传递

    Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言). 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这 ...

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

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

  4. java参数传入的是一个类名_Java编程细节——泛型的定义(类、接口、对象)、使用、继承...

    1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题: i. 由于Java设计之初并不知道会往容器中存放什么类型的元素,因此元素类型都设定为Object,这样就什么东西都能放 ...

  5. java 接口的泛型方法_Java泛型/泛型方法/通配符/泛型接口/泛型泛型擦出

    从JDK1.5以后引入了三大常用新特性:泛型.枚举(enum).注解(Annotation).其中JDK1.5中泛型是一件非常重要的实现技术,它可以帮助我们解决程序的参数转换问题.本文为大家详细介绍一 ...

  6. java泛型类的构造函数_Java泛型构造函数

    推荐关注公众号:锅外的大佬 每日推送国外优秀的技术翻译文章,励志帮助国内的开发者更好地成长! 1.概述 我们之前讨论过Java Generics的基础知识.在本文中,我们将了解Java中的通用构造函数 ...

  7. java 参数命名冲突_Java中的命名参数

    java 参数命名冲突 创建具有许多参数的方法是一个主要的缺点. 每当需要创建这样的方法时,就在空气中闻一闻:这是代码的味道. 强化单元测试,然后进行重构. 没有借口,没有屁股. 重构! 使用构建器模 ...

  8. java参数类型不同_java – 两种不同的参数类型(将Object强制转换为Type)

    我想调用一个方法,但参数可以是Button或ImageButton.我用不同的参数类型作为对象调用该方法两次. 在我的方法attributesOfButton中,我想分配相应的按钮类型,如下面的代码所 ...

  9. java super extend 区别_Java泛型中extends和super的区别

    extends T>和 super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. extends T&g ...

最新文章

  1. TCP/IP详解学习笔记(9)-TCP协议概述
  2. better-scroll 的介绍
  3. EJB3.0开发环境的搭建
  4. 给一个不多于5位的正整数 要求_java练习题 打卡第5天
  5. pandas访问分组里面的数据_实战用pandas+PyQt5制作一款数据分组透视处理工具
  6. python中可用于布尔测试的,如何在Python中使用布尔值?
  7. C语言 PK 各大编程语言
  8. JavaBeginnersTutorial 中文系列教程·翻译完成
  9. 乱谈互联网产品开发(二)
  10. ssl介绍以及双向认证和单向认证原理
  11. 37线性映射04——像与核、核与像的计算、线性映射的维数公式
  12. atheros ar9285 wireless network Adaper设备的驱动器正防止机器进入待机状态
  13. 电视剧 | 黑镜S5E3 瑞秋洁柯小艾希莉
  14. qt linux 程序设置字体,QT 程序更换字体方法之一
  15. 软件能力成熟度模型(Capabilitymaturity model,CMM)
  16. # 二阶混合偏导(Second-order mixed derivatives)
  17. postgres查询序列_PostgreSQL 序列使用
  18. emoji表情在数据库中如何查询
  19. spring相关:spring介绍与两大核心容器
  20. c语言怎么返回数组,c++从函数返回数组的方法代码

热门文章

  1. javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
  2. DataRow 数组转化成DataTable
  3. .NET实现之(自动更新)
  4. Android开发之旅:HelloWorld项目的目录结构
  5. mysql having in_MySQL having子句
  6. MySQL 之全文索引
  7. RabbitMQ中的消息确认ACK机制
  8. mysql select into和insert into select
  9. (自己测试没有问题)解决git clone时报错:The requested URL returned error: 401 Unauthorized while accessing
  10. 程序员获取编程灵感的 10 种方式