1.这是一个通用

仿制药javaA型安全机制来保护。

它是通过变量的类型,如果,实现变量类型限制,从而保证了程序编译变量类型的安全性在一定程度上。反之。如果没有泛型,这些只存在于程序,如果猿的大脑,这将导致类型转换异常发现,当程序执行。

	//不用泛型
List list1 = new ArrayList();
list1.add(1);
Object o = list1.get(0); //返回Object类型对象
Integer i = (Integer) o; //需预先知道类型 //用泛型
List<String> list2 = new ArrayList<String>();
list2.add("aaa");
String str = list2.get(0); //直接返回定义时指定的类型,防止类型转换异常

2.多泛型

多泛型是指。在一个类型定义时使用多个泛型。在Map中多见多泛型的应用。例如以下:

Map<String,String> map = new HashMap<String,String>();
Set<Map.Entry<String,String>> set = map.entrySet();
for(Iterator<Map.Entry<String,String>> iter = set.iterator();iter.hasNext();){
String key = iter.next().getKey();
String value = iter.next().getValue();
}
//多泛型定义
public class MutilGeneric<T,E> {
<span style="white-space:pre">	</span>private T attr1; //定义成员变量
<span style="white-space:pre"> </span>private E attr2;

3.限制泛型可用类型

不限制泛型类别时,能够使用不论什么类型来实例化泛型类型中的类型。即在不设置默认类型时。泛型类型一般是Object,但在实际开发中,我们往往须要对类型加以限制,指定泛型类型仅仅能在一定的范围内。java泛型中给我们提供了这种机制。通过extendskeyword。我们就能够指定泛型类型范围,这里指定的类型必须是继承自某个类或实现某个接口。详细定义例如以下:

/**
* 定义泛型类,限制类型仅仅能为List<Person>的子类
* @author caoxr
* @param <T>
*/
public class PersonSeqUtil<T extends List<Person>> {

4.类型通配符<?

>或<? extends ClassType>

个人理解类型通配符的使用,是为了实如今定义泛型类持有者时,限制泛型可用类型的范围,扩展泛型类型持有者对象可接纳类型的范围。代码示意例如以下:

	PersonSeqUtil<LinkedList<Person>> psu1 = new PersonSeqUtil<LinkedList<Person>>();
PersonSeqUtil<ArrayList<Person>> psu2 = new PersonSeqUtil<ArrayList<Person>>();
//运用通配符定义PersonSeqUtil对象,使其传入类型仅仅能为List<person>的子类
PersonSeqUtil<? extends List<Person>> psu = null;
psu = new PersonSeqUtil<LinkedList<Person>>();
psu = new PersonSeqUtil<ArrayList<Person>>();
//也能够通过super定义,要求指定类型为指定继承类型的父类
PersonSeqUtil<? super ArrayList<Person>> psu3 = null;
psu3 = new PersonSeqUtil<List<Person>>(); List<? extends Object> list = new ArrayList<Object>();
list.add(null);
list.add("haha"); //报错,编译不通过

注意上述代码中,当向list中add null时,代码是编译通过的,而当放入字符串“haha”时,则编译不通过,按常理分析。Object类为所以类型的父类,应该是编译通过的。但其实并不是如此,由于从list的定义来看,list仅仅同意放Object的子类。但不知道详细放什么类型。假设能放入详细类型的话,这就意味着当我们再取出时,必须记得它是什么类型。然后强制转获取的变化进入值。因此,我们失去了仿制药的意义。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

java一般使用基础的更多相关文章

  1. 如何夯实(Java)编程基础,并深入学习和提高

    如何夯实(Java)编程基础,并深入学习和提高? 240赞同反对,不会显示你的姓名 匿名用户 240 人赞同 多学习...网上自学的学习网站很多,见以下榜单~一.汇总榜单: 公开课_学习网站导航 收录 ...

  2. Java开发的基础条件:

    ------------Java开发的基础条件:Java相关的基础+对编程的自己的理解+调试代码+自己的坚持 一定要谦逊,不人云亦云,不去妄言某一门语言或技术好或坏!不是哪门技术有问题,而是(不会用才 ...

  3. Java多线程系列--“基础篇”11之 生产消费者问题

    概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...

  4. Java多线程系列--“基础篇”04之 synchronized关键字

    概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...

  5. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式

    概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...

  6. Java多线程系列--“基础篇”03之 Thread中start()和run()的区别

    概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...

  7. Java多线程系列--“基础篇”05之 线程等待与唤醒

    概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...

  8. Java多线程系列--“基础篇”06之 线程让步

    概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...

  9. Java多线程系列--“基础篇”07之 线程休眠

    概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http:// ...

  10. Java多线程系列--“基础篇”08之 join()

    概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 转载请注明出处:http ...

随机推荐

  1. MySql之ALTER命令用法详细解读(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细解读了MySql语法中Alter命令的用法,这是一个用法比较多的语法,而且功能还是很强 ...

  2. hdu 4308 Saving Princess claire_ BFS

    为了准备算法考试刷的,想明确一点即可,全部的传送门相当于一个点,当遇到一个传送门的时候,把全部的传送门都压入队列进行搜索 贴代码: #include <iostream> #include ...

  3. bzoj 1874 取石子游戏 题解 &amp; SG函数初探

    [原题] 1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 334  Solved ...

  4. TCP拥塞控制 (1)

    Basic: TCP,传输控制协定,它是目前最广泛使用的网络传输协议.SMTP.SSH.FTP.HTTP等因特网底层协议均是TCP. TCP面向连接,提供端到端的数据可靠传输.连接时三次握手.断开是四 ...

  5. CSDN 夏令营课程 项目分析

    主题如以下: 正确改动后的程序: #include <iostream.h> //using namespace std; class BASE { char c; public: BAS ...

  6. c++11多线程简介

    C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用 ...

  7. Hibernate学习笔记(1)Hibernate构造

    一 准备工作 首先,我们将创建一个简单的基于控制台(console-based)Hibernate应用. 我们所做的第一件事就是创建我们的开发文件夹.并把所有需要用到的Java件放进去.解压缩从Hib ...

  8. 基于Spring + Spring MVC + Mybatis 高性能web构建

    基于Spring + Spring MVC + Mybatis 高性能web构建 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互 ...

  9. 【C语言探索之旅】 第一部分第十课:练习题+习作

    内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三 ...

  10. Windows8和Windows Phone应用开发主题编码汇总

    原文:Windows8和Windows Phone应用开发主题编码汇总 在Windows 8和Windows Phone应用开发中经常需要自定义一些Windows Store应用风格主题,下面列举一些 ...