`
Luob.
  • 浏览: 1588614 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之15天 泛型 (一)

    博客分类:
  • Java
阅读更多
JDK1.5 泛型
/**
 * JDK1.5 泛型
 * 泛型格式:通过<> 来定义操作的 "引用数据类型"
 * 
 * 在使用java提供的对象时,什么时候使用泛型呢?
 * 
 * 通过在集合框架中很常见
 * 只要见到 <>就要定义泛型
 * 
 * 其实<> 就是用来接受类型的
 * 当使用集合时,将集合中要存储的数据类型作为参数传递到<>中时候
 */
public class GenericDemo {

	public static void main(String[] args) {
		method_1();
		System.out.println("=======================");
		method_2();
	}
	/**
	 * JDK 1.5出现了泛型 出现的新特新,用于解决安全问题,是一个安全机制.
	 * 好处: 
	 * 1)将运行时期的问题 java.lang.ClassCastException:  转移到了编译时期.
	 *    方便程序员解决问题,让运行时期问题减少.
	 * 2)避免了强制 类型转换的麻烦
	 */
	public static void method_2(){
		ArrayList<String> al=new ArrayList<String>();
		al.add("abc01");
		al.add("abc01");
		al.add("abc01");
		//al.add(4);  编译失败 
		
		//Iterator it=al.iterator();  //JDK1.5以前 只能凭程序员主动 判断元素类型.
		Iterator<String> it=al.iterator();
		while(it.hasNext()){
			String s=it.next();  //没有进行强制转换
			System.out.println(s+":"+s.length());
		}
		
	}
	
	/**
	 * JDK升级: 高效  安全 简化书写
	 * 下面  程序编译 通过,但是运行有问题
	 * java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
	 * 分析原因就是  因为 集合中保存的值出现了 4  不是字符串类型 .所以  JDK 1.5 后就出现了泛型 
	 */
	public static void method_1(){
		
		ArrayList al=new ArrayList();
		al.add("abc01");
		al.add("abc01");
		al.add("abc01");
		al.add("abc01");
		//al.add(new Integer(4));
		al.add(4); //JDK1.5以前是不可以这样做到 只能用上面的那句话.
		
		Iterator it=al.iterator();
		
		while(it.hasNext()){
			String s=(String)it.next();
			System.out.println(s+":"+s.length());
		}
	}

}

泛型 应用 
/**
 * 泛型 应用  
 * 1.修改练习 中使用个TreeSet中  字符串长度排序
 * 2.在比较器中使用泛型 
 */
public class GenericDemo2 {
	
	public static void main(String[] args) {
		TreeSet<String> ts=new TreeSet<String>(new StrLenComparator());
		ts.add("abcde");
		ts.add("cc");
		ts.add("bad");  //长度都相同 内容不同
		ts.add("gdg");  //长度都相同 内容不同
		ts.add("hahaha");
		
		Iterator<String> it=ts.iterator();
		while(it.hasNext()){
			String s=it.next();
			System.out.println(s+":"+s.length());
		}
		
	}

}

class StrLenComparator implements Comparator<String>{

	@Override
	public int compare(String o1, String o2) {
		//倒序 将两个对象换个位置就可以了
//		int num=new Integer(o1.length()).compareTo(new Integer(o2.length()));
		int num=new Integer(o2.length()).compareTo(new Integer(o1.length()));
	
		//主要条件判断完了 判断次要条件  		
		if(num==0)
			return o2.compareTo(o1);
		
		return num;
	}
}

泛型在自定义的程序中使用
/**
 * 泛型在自定义的程序中使用
 *
 */

class Worker{
	
}

//后来多了 Student
class Student{
	
}

class Tool{
	private Worker w;
	public void setWorker(Worker w){
		this.w=w;
	}
	public Worker getWorker(){
		return w;
	}
}
//变形1 1.5以前 就这样干 扩张程序 
class Tool1{
	//这样为了兼容 Worker 和  Student 于是采用了 Object
	private Object obj;
	public void setObject(Object obj){
		this.obj=obj;
	}
	public Object getObject(){
		return obj;
	}
}

//变形3 1.5以后  泛型 做法 由调用者来确定调用的类型
class Utils<QQ>{
	private QQ q;
	public void setObject(QQ q){
		this.q=q;
	}
	public QQ getObject(){
		return q;
	}
}




public class GenericDemo3 {
	public static void main(String[] args) {
		Tool t=new Tool();
		t.setWorker(new Worker());
		t.getWorker();
		
		//正常
		Tool1 t1=new Tool1();
		t1.setObject(new Worker());
		Worker w1=(Worker)t1.getObject();
		
		//下面编译通过  运行失败 .类型转换异常
		Tool1 t2=new Tool1();
		t1.setObject(new Student());
		Worker w2=(Worker)t1.getObject();
		
		//泛型来做
		Utils<Worker> u=new Utils<Worker>();
		u.setObject(new Worker());
		//u.setObject(new Student());  编译就报错了 这样提高程序的安全性
		Worker w3=u.getObject();  //看看 不用强转了吧  
		
	}

}
0
3
分享到:
评论

相关推荐

    java毕向东源代码1-15天

    【描述】提到的"共25天"暗示了这是一个完整的教学计划,不仅限于15天的基础源代码,可能还包括了后10天的进阶内容,如面向对象编程的深入理解、异常处理、集合框架、多线程、I/O流、网络编程等Java核心特性。...

    韩顺平30天学java

    《韩顺平30天学Java》是一门针对初学者设计的Java编程课程,旨在帮助学员在短短一个月的时间内掌握Java编程基础。该课程由知名IT教育专家韩顺平教授,以其独特的教学风格和深入浅出的讲解方式,使得复杂的编程概念变...

    java视频教程_黑马Java零基础辅导班[第二期]15天课件源码

    【Java视频教程_黑马Java零基础辅导班[第二期]15天课件源码】是一套专为初学者设计的全面Java学习资源。这个教程旨在帮助那些对编程没有基础或者对Java语言不熟悉的学员,通过15天的密集学习,掌握Java编程的基本...

    java基础18天Typora笔记

    这是一份专为Java初学者准备的学习资源,由魔乐科技提供,旨在帮助用户在18天内建立起坚实的Java编程基础。Typora是一款简洁而高效的Markdown编辑器,使得笔记整理和阅读更加便捷。通过这份笔记,学习者将逐步了解并...

    跟我学java26日通 第15天 Java类集框架

    Java类集框架是Java编程语言中的核心组成部分,它为开发者提供了高效、灵活的数据存储和...通过"跟我学java26日通 第15天 Java类集框架"的教程,你可以逐步掌握这些关键技能,为成为一名熟练的Java开发者打下坚实基础。

    21天自学速成 Java 语言 电子书

    Java语言是一种广泛应用于互联网开发、企业级应用、大数据处理、移动开发等多个领域的高级编程语言。它的设计理念是“一次编写,到处运行”,这得益于其跨平台的特性,由Sun Microsystems(后被甲骨文公司收购)在...

    21天学会Java--教案

    本教程“21天学会Java”旨在为新手提供一个系统、全面的学习路径,帮助他们在短时间内掌握Java编程基础。 在21天的学习计划中,通常会按照以下阶段进行: 第1-3天:Java基础知识 这个阶段会介绍Java的历史、发展和...

    Java35天详细讲义

    Java35天详细讲义是一份全面覆盖Java编程基础知识到实际项目应用的教程,旨在为初学者提供系统化的学习路径。这份讲义深入浅出地介绍了Java语言的核心概念和技术,帮助学习者逐步掌握这一强大且广泛应用的编程语言。...

    20天java核心技术教程

    《20天Java核心技术教程》是一份全面且深入的学习资源,专为想要快速掌握Java编程基础和核心概念的初学者设计。20天的时间框架旨在提供一个高效的学习计划,帮助学习者在短时间内建立起坚实的技术基础。 Java是一种...

    21天学会JAVA编程

    在“21天学会JAVA编程”这本教材中,你将踏上一段精彩的旅程,系统学习Java编程语言,从零基础到初级程序员的蜕变只需短短三周。Java是一种广泛应用的、面向对象的编程语言,以其跨平台特性、稳定性和高效性闻名于世...

    18天java笔记(txt版)

    Java编程语言是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。这份"18天Java笔记"提供了一个快速学习Java的核心内容精华,适合初学者和有一定经验的开发者进行回顾和巩固。txt版的格式使得笔记...

    尚硅谷_宋红康_20天Java核心_资料工具

    在Java编程领域,"尚硅谷_宋红康_20天Java核心_资料工具" 提供的是一套全面且实用的学习资源,旨在帮助开发者深入理解Java的核心概念和技术。Java是一种广泛应用于互联网开发、企业级应用、大数据处理等领域的面向...

    java练习27天.rar

    这个名为"java练习27天.rar"的压缩包文件似乎提供了一个精心设计的学习路径,帮助用户在27天内快速提升Java编程技能。"Java-master"这个子文件名暗示了它可能包含一个完整的Java学习项目或者代码库,以大师级的标准...

    java速成100天

    10. **泛型**:泛型是Java SE 5.0引入的新特性,它允许在定义类、接口和方法时指定类型参数,以实现类型安全和代码重用。 11. **Java Swing和JavaFX**:对于GUI编程,学习如何使用Swing库创建桌面应用程序,或者...

    21天学通Java.第7版-中文版-良心积分价

    《21天学通Java》是为初学者设计的一本教程,旨在帮助读者在短时间内掌握Java编程基础。这本书的第7版更新了最新的Java技术,包括Java 8及更高版本的关键特性,使得学习内容与时俱进,更适合当前的开发环境。通过21...

    21天学java源代码

    "21天学Java"可能是一本旨在帮助初学者在短时间内掌握Java编程基础的教程书籍。通过提供源代码,这本书可能深入解释了Java语言的关键概念和实践应用。 在21天的学习过程中,读者通常会接触到以下几个核心知识点: ...

    21天学通JAVA(高清版)

    《21天学通JAVA(高清版)》是一本针对初学者和有一定基础的程序员设计的Java编程教程。这本书以21天的学习计划为线索,系统地介绍了Java语言的核心概念和技术,旨在帮助读者在短时间内掌握Java编程的基础知识,并建立...

    21天学通Java(中英文打包)

    《21天学通Java(中英文打包)》是一份专为Java初学者设计的教程资源,包含了21天的学习计划,旨在帮助学习者在短时间内掌握Java编程的基础知识。这个系列教程以实践为主导,理论与实践相结合,使得学习过程更为高效...

    Learn Java in 21 Days

    - **第15天:图形用户界面** 学习使用Swing或JavaFX框架开发GUI应用程序。 - **第16天:文件与流** 掌握文件输入输出操作,包括文件流、缓冲区等高级话题。 - **第17天:网络编程** 介绍网络编程的基本概念,...

    Java2 编程21天自学通

    《Java2 编程21天自学通》是一本针对初学者设计的Java编程教程,旨在帮助读者在21天内快速掌握Java2的核心概念和技术。这个教程可能包含多个章节,涵盖从基础语法到高级特性的全面讲解。下面将详细阐述Java2编程中的...

Global site tag (gtag.js) - Google Analytics