文档章节

Java为什么要引入泛型?

e
 enosh
发布于 2014/12/17 18:12
字数 530
阅读 121
收藏 0

1. 实现泛型的目的

泛型要实现的目标就是在编译的时候就能找出bugs,而不是在运行时才发现错误。在编译的时候就能找出问题能帮助我们节省大量的时间,因为在编译时bugs更容易找出(编译器帮我们找出)也更容易修复。重要的是泛型是属于编译期的概念。

2. 如果没有泛

class Room {
 
	private Object object;
 
	public void add(Object object) {
		this.object = object;
	}
 
	public Object get() {
		return object;
	}
}
 
public class Main {
	public static void main(String[] args) {
		Room room = new Room();
		room.add("60"); //this will cause a run-time error
		Integer i = (Integer)room.get();
		System.out.println(i);
	}
}
     在这儿我们想实现一个类,我们想让这个类的成员变量可以是任何类型,其实一个Room是可以放各样的东西的,所以这儿成员变量的类型为Object,表示这个房间可以放各样的东西。

    想想如果我们在这个Room里面放的是一个字符串,但我们要取这个字段的时候我们以为自己之前存的是一个Integer类型的数据,这时候在运行期就会报错了

3. 如果用泛型

class Room<T> {
 
	private T t;
 
	public void add(T t) {
		this.t = t;
	}
 
	public T get() {
		return t;
	}
}
 
public class Main {
	public static void main(String[] args) {
		Room<Integer> room = new Room<Integer>();
		room.add(60);
 
		Integer i = room.get();
		System.out.println(i);
	}
}

     如果main方法改成如下,add一个字符串这时候就会出现编译错误信息。因Room<Integer>的实例对象只能add Integer类型的对象,编译器会做强类型检查。还有一个好处是,我们不在需要给get()方法取出来的对象塑型了,因为编译器知道get()方法会返回什么类型,而不是在运行期才知道。


4. 总结

    虽然引入泛型的目的是在编译期的时候就能检查出错误来,但同时泛型的引入也增强了代码的可复用性。

参考:http://www.programcreek.com/2012/04/why-do-we-need-generic-types-in-java/

© 著作权归作者所有

e
粉丝 8
博文 75
码字总数 19035
作品 0
大连
私信 提问
Cannot make a static reference to the non-stati...

今天碰到这样一些错误,Eclipse提示Cannot make a static reference to the non-static type T。代码如下: public class DAOFactory<D extends TemplateDAO<B>, B> {private static Map<Str......

开源中国驻成都办事处
2013/05/30
3K
0
Java中的泛型 (上) - 基本概念和原理

下面我们来详细讨论Java中的泛型,虽然泛型的基本思维和概念是比较简单的,但它有一些非常令人费解的语法、细节、以及局限性,内容比较多。 所以我们分为三节,逐步来讨论,本节我们主要来介...

笔记12
2016/10/29
504
0
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.6K
30
10 道关于 Java 泛型的面试题

1.Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中。那些拥有Java1.4或更早版本的开发背景的人都知道...

蚂蚁-Declan
2018/10/24
169
0
从java1到java9每个版本都有什么新特性?

每次出新版本,大家大概都会这么问,“Java X会有什么特性呢?” 。在下面的内容里,我总结了至今为止的Java主要发行版中各自引入的新特性,这样做的目的是为了突出各个新特性是在哪个发行版...

Java红茶
2017/11/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

实战项目-学成在线(一)

之前看的黑马程序员实战项目之一,打算以博客的形式写出来,也让自己重新温习一下。 1、项目背景 略(就是当前这东西很火,我们重点在开发,这些就略过) 2、功能模块 门户,学习中心,教学管...

lianbang_W
27分钟前
2
0
基于Vue的数字输入框组件开发

本文转载于:专业的前端网站➫基于Vue的数字输入框组件开发 1、概述 Vue组件开发的API:props、events和slots 2、组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果:...

前端老手
36分钟前
2
0
百度地图根据经纬度获取运动轨迹

<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0, user-scalable=n......

泉天下
37分钟前
4
0
学习记录(day04-axios增删改查、v-for循环、页面加载成功处理函数)

[TOC] 1.1 基本语法:插值表达式 <template> <div> {{username}} <br/> {{1+2+3}} <br/> {{'你的名字是:' + username}} <br/> {{'abc'.split('')}} </div><......

庭前云落
今天
3
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部