Java安全机制之泛型(JDK1.5)
泛型,类型安全机制。
好处:
1.将运行时期出现问题ClassCastException转移到了编译时期,方便解决问题,减少运行时期的问题,有利于程序的健壮性。
2.避免了强制转换的麻烦
泛型格式:
ArrayList<String> al = new ArrayList<String>();
若增加Integer类型的数据,在编译的时期就会提示错误。
使用迭代器取值的时候,需要声明类型

示例代码:
import java.util.*; class GenericDemo2
{
public static void main(String[] args)
{
TreeSet<String> ts = new TreeSet<String>(new LenComparator());
ts.add("abcdc");
ts.add("dbcdc");
ts.add("cd"); Iterator<String> it = ts.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
} class LenComparator implements Comparator<String>
{
public int compare(String obj1, String obj2){
int num = new Integer(obj1.length()).compareTo(new Integer(obj2.length())); if(num==0)
return obj2.compareTo(obj1);
return num; }
}
问题一、
在使用java提供的对象时,什么时候使用泛型?
答:
通常在集合框架中比较常见。只要见到<>就要定义泛型
接口Collection<E>:E代表一个变量,形式参数。
其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
------------------------------------
//泛型类
class Utils<T>
{
private T t;
public void setObject(T t){
this.t = t;
}
public T getObject(){
return t;
}
}
Demo<String> d = new Demoe<String>();
当类中要操作的引用数据类型不确定的时候,早起定义Object来完成拓展,现在定义泛型来完成拓展。
泛型类的对象明确要操作的具体类型后,所有方法要操作的类型就已经固定了。
------------------------------------------
为了让不同的方法可以操作不同的类型,而且类型还不确定,那么可以将泛型定义在方法上。
class Demo{
public <T>void show(T t){
}
public <T>void print(T t){
}
}
Demo d = new Demo();
-----------------------------------
静态方法,不可以访问类上定义的泛型。
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
public static <W> void method(W t);
--------------------------------------
泛型限定:
<? extends Person>
? :通配符,可以理解为占位符
----------------------------------
泛型的限定:
用于泛型扩展
上限:
? extends E: 可以接受E类型或者E的子类类型。
下限:
? super E:可以接受E类型,或者E的父类型。
里面只能使用父类方法。
Java安全机制之泛型(JDK1.5)的更多相关文章
- JAVA反射机制--怎么不受泛型束缚给数组赋值
在Java中,声明数组的时候我们经常会写泛型限制用户输入或者获取的数据.如:ArrayList<String> list = new ArrayList<>(); String ...
- Java 异常处理机制和集合框架
一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...
- JAVA提高六:泛型
在面向对象编程语言中,多态算是一种泛化机制.例如,你可以将方法的参数类型设置为基类,那么该方法就可以接受从这个基类中导出的任何类作为参数,这样的方法将会更具有通用性.此外,如果将方法参数声明为接口,将 ...
- Java线程机制学习
前面的文章中总结过Java中用来解决共享资源竞争导致线程不安全的几种常用方式: synchronized: ReentrantLock: ThreadLocal: 这些都是在简单介绍了基本用法的基础上 ...
- 小白学Java:老师!泛型我懂了!
目录 小白学Java:老师!泛型我懂了! 泛型概述 定义泛型 泛型类的定义 泛型方法的定义 类型变量的限定 原生类型与向后兼容 通配泛型 非受限通配 受限通配 下限通配 泛型的擦除和限制 类型擦除 类 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制专题
·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...
- Java 类加载机制
类的加载: 类的初始化: 类什么时候才被初始化:1)创建类的实例,也就是new一个对象2)访问某个类或接口的静态变量,或者对该静态变量赋值3)调用类的静态方法4)反射(Class.forName(&q ...
- Java反射机制的学习
Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调 ...
随机推荐
- Linux 下修改Tomcat使用的JVM内存大小
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- Java图形化界面设计——布局管理器之GridLayout(网格布局)
网格布局特点: l 使容器中的各组件呈M行×N列的网格状分布. l 网格每列宽度相同,等于容器的宽度除以网格的列数. l 网格每行高度相同,等于容器的高度除以网格的行数. l 各组件的排列方式 ...
- Ubuntu 麒麟版下安装:Apache+php5+mysql+phpmyadmin.
摘要 LAMP是Linux web服务器组合套装的缩写,分别是Apache+MySQL+PHP.此文记录在Ubuntu上安装Apache2服务器,包括PHP5(mod_php)+MySQL+phpmy ...
- .Net MVC 入门之Razor语法
Razor语法 Razor是以后MVC项目中都需要用的, 所以在学MVC的基础的时候,我们的目标:要了解熟悉Razor页面的语法结构,做到灵活使用,so我们马上开始学习Razor,也请你们多评论和推荐 ...
- 使用Notepad++快速有效删除复制代码中的行号
转载:http://plum.0602.blog.163.com/blog/static/1130006502011101524120757/ 试了该方法,很好用! 为什么我把用Notepad++删除 ...
- FMDB 直接将查询结果转化为字典
今天学习FMDB框架,发现非常好用的一点,就是就以把查询结果直接转化为字典 NSString *querySql = @"select * from stuInfo"; NSMut ...
- objective-C学习笔记(三)数据成员:属性与实例变量
类型成员 Type Member 结构体 struct 的成员很简单,只有变量. 类的成员就很多了: 数据成员 data member 描述对象(本讲重点) · 实例变量 instance vari ...
- Mac下搭建SVN服务器
1.检查机器上是否安装svnserve zhangdeqiangdeiMac:Downloads hengjiang$ svnserve --version svnserve, version (r1 ...
- Could not load type System.ServiceModel.Activation.HttpModule解决办法
等注册完成后网站就可以打开了. win2008下提示未能从程序集“System.ServiceModel, Version=3.0.0.0问题解决 在Windows Server 2008中的IIS服 ...
- codeforces 607B. Zuma 区间dp
题目链接 给一个长度为n的序列, 每一次可以消去其中的一个回文串, 问最少几次才可以消完. 代码很清楚 #include <iostream> #include <vector> ...