泛型应用之一
来源:互联网 发布:西门子840d软件 编辑:程序博客网 时间:2024/05/17 21:52
JDK5中的泛形允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生问题,转变为编译时的问题,以此提高程序的可读性和稳定性(尤其在大型程序中更为突出)。
注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。
泛形的基本术语,以ArrayList<E>为例:
ArrayList<E>中的E称为类型参数变量
ArrayList<Integer>中的Integer称为实际类型参数
整个ArrayList<Integer>称为参数化的类型ParameterizedType
泛型的典型应用
2,使用增强for循环迭代泛形集合中的元素。
3,存取HashMap中的元素。
使用泛形时的几个常见问题:
使用泛形时,泛形类型须为引用类型,不能是基本数据类型
ArrayList<String> list = new ArrayList<Object>();(错误写法)
解释:如果往ArrayList中存的是Interge,而左边却用String来对待,很明显这是不可以的。
ArrayList<Object> list = new ArrayList<String>(); (错误写法)
这个和上面的原因差不多。
ArrayList<String> list = new ArrayList ();(正确写法)
这句话肯定要行的,如果一个项目是jdk1.5版本之前的,而维护时确是现在,有了泛型。比如:
ArrayList list = new ArrayList<String>();(也是正确写法)
Java程序中的普通方法、构造方法和静态方法中都可以使用泛型。方法使用泛形前,必须对泛形进行声明,语法:<T> ,T可以是任意字母,但通常必须要大写。<T>通常需放在方法的返回值声明之前。
比如写个工厂类来产生DAO里面的实现类
泛型也可以用在类上 比如:
注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为“擦除”。
泛形的基本术语,以ArrayList<E>为例:
ArrayList<E>中的E称为类型参数变量
ArrayList<Integer>中的Integer称为实际类型参数
整个称为ArrayList<E>泛型类型
整个ArrayList<Integer>称为参数化的类型ParameterizedType
泛型的典型应用
1,使用迭代器迭代泛形集合中的元素。
/*创建一个带泛型的Map<Student, String>*/Map<Student, String> hashmap = new HashMap<Student, String>();hashmap.put(new Student("zhangshan1",45), "shanghai");Set<Student> keyset = hashmap.keySet();Iterator<Student> it = keyset.iterator();while(it.hasNext()){Student stu = it.next();String addr = hashmap.get(stu);System.out.println(stu.getName()+"的年龄是:"+stu.getAge()+" 所在地是:"+addr);}
2,使用增强for循环迭代泛形集合中的元素。
Set<Map.Entry<Student, String>> mapentry = hashmap.entrySet();for(Map.Entry<Student, String> en: mapentry){Student student = en.getKey();String address = hashmap.get(student);System.out.println(student.getName()+"的年龄是:"+student.getAge()+" 所在地是:"+address);}
3,存取HashMap中的元素。
使用泛形时的几个常见问题:
使用泛形时,泛形类型须为引用类型,不能是基本数据类型
ArrayList<String> list = new ArrayList<Object>();(错误写法)
解释:如果往ArrayList中存的是Interge,而左边却用String来对待,很明显这是不可以的。
ArrayList<Object> list = new ArrayList<String>(); (错误写法)
这个和上面的原因差不多。
ArrayList<String> list = new ArrayList ();(正确写法)
这句话肯定要行的,如果一个项目是jdk1.5版本之前的,而维护时确是现在,有了泛型。比如:
public List t1(){//以前写的项目return new ArrayList();}//现在用List<Integer> l = t1();
ArrayList list = new ArrayList<String>();(也是正确写法)
Java程序中的普通方法、构造方法和静态方法中都可以使用泛型。方法使用泛形前,必须对泛形进行声明,语法:<T> ,T可以是任意字母,但通常必须要大写。<T>通常需放在方法的返回值声明之前。
比如写个工厂类来产生DAO里面的实现类
public class DaoFactory {private static final DaoFactory factory = new DaoFactory();private DaoFactory(){}public static DaoFactory getInstance(){return factory;}@SuppressWarnings("unchecked")public <T> T CreateDao(String classname,Class<T> clazz){//利用泛型写一个声明返回类型为T的方法try { T t = (T) Class.forName(classname).newInstance(); return t;} catch (Exception e) {throw new RuntimeException(e);} }}
泛型也可以用在类上 比如:
class Demo<T> {//在类上定义的泛形只对类的非静态成员有效public void run(T t){}public void eat(T t){}public static <T> void test(T t){}}
0 0
- 泛型应用之一
- 泛型应用之一对多实例
- Delphi泛型应用示例之一:接口化指针
- Java泛型之一
- 动态规划应用之一
- 学习:Java泛型之一
- 学习:Java泛型之一
- StringBuilder类的应用之一
- Struts应用经验(之一)
- iphone数据库简单应用之一
- 计算机应用的热点之一
- 企业设计器之一:应用
- 栈应用之一数制转换
- 三十一、反射的应用之一
- linux网络工具应用详解之一
- Web应用乱码解决之一
- matlab基础应用之一元插值
- C#泛型学习笔记之一(约束)
- 怎样选择使用特殊素材的乒乓球底板
- 如何在虚拟机中为RED HAT配置本地yum源
- [Wikioi 1041][NOIP 2001提高组]Car的旅行路线(疑难题)
- 线索二叉树的理解
- 三级级联查询省份名称和编码(保证名称不重复)的SQL语句
- 泛型应用之一
- DW8051 up_dn_ctr.v
- 解决linux(Ubuntu)下Pydev无法安装的问题
- python paramiko模块的安装使用
- import maven项目错误
- DAVINCI DM3730开发攻略——序
- 形参 里的const和类成员函数形参外后跟着的const
- MySQL存储过程详解 mysql 存储过程
- PostgreSQL连接Python