`
wtt2312
  • 浏览: 14839 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员---泛型

阅读更多
-----http://www.itheima.comjava培训、android培训期待与您交流!-----


1、概述

     泛型是JDK1.5版本添加的新特性,是一种安全机制,用于解决安全问题。
     泛型主要使用在集合框架中,为了保证存取数据的类型一致,就要指定要存取的数据类型,这里所说的数据类型是引用数据类型。

2、泛型的使用方式:
    (1)泛型可以定义在方法上,那么就可以操作不同类型的数据。
例如:public <T> void show(T t){}
在方法上定义泛型,定义的是什么类型<T>,传入的数据就应该是什么类型的(T t)。
泛型也可以在静态方法中定义:且泛型的位置在返回值类型前,修饰符后
    (2)泛型可以定义在接口上。
例如:interface Inter <T>{ void show(T t) }
这里的参数时形参(形式参数),在某类在实现接口的时候指定的泛型就是实参(实际参数),
如<String>,这里指定的数据类型就是字符串类型,那么接收的数据类型也要是字符串类型

3、泛型限定
     当泛型不明确时,用占位符(通配符)<?>
     当泛型明确时,就指定具体类型 <T>

4、使用泛型的好处
    (1)将运行时期的类型转换异常(ClassCastException)转移到编译时期, 便于程序员检查
    (2)避免了强制类型转换的麻烦
下面举个简单的例子:
例如,向TreeSet集合中存储自定义对象(Student/Worker)。TreeSet集合可对集合中的元素进行排序
分析:在对学生和工人排序时,要定义两个比较器,强制使学生和工人具有比较性,而此时就使得代码的复用性减弱。
          那么,就把学生和工人的共同属性向上抽取,形成Person类,在定义比较器时添加泛型,就使得存取的类型一致。


import java.util.*;
class GenericDemo3 
{
	public static void main(String[] args) 
	{
		//接收的类型
		TreeSet<Student> ts = new TreeSet<Student>(new Comp());
		ts.add(new Student("wangshan---001"));
		ts.add(new Student("wangshan---02"));
		ts.add(new Student("wangshan---007"));
		ts.add(new Student("wangshan---03"));
		//获取的类型要与接收的类型一致
		Iterator<Student> it = ts.iterator();
		while (it.hasNext())
		{
			System.out.println(it.next().getName());
		}

		TreeSet<Worker> ts1 = new TreeSet<Worker>(new Comp());
		ts1.add(new Worker("lisi01"));
		ts1.add(new Worker("lisi09"));
		ts1.add(new Worker("lisi06"));
		ts1.add(new Worker("lisi009"));

		Iterator<Worker> it1 = ts1.iterator();
		while (it1.hasNext())
		{
			System.out.println(it1.next().getName());
		}		
	}
}
//定义比较器
class Comp implements Comparator<Person>
{
	//覆盖compare方法
	public int compare(Person p1,Person p2)
	{
		//return p1.getName().compareTo(p2.getName());
		return p2.getName().compareTo(p1.getName());
	}
}
class Person
{
	private String name;

	Person(String name)
	{
		this.name = name;
	}

	public String getName()
	{
		return name;
	}
	public String toString()
	{
		return "person:" + name;
	}
}

class Student extends Person
{
	Student(String name)
	{
		super(name);
	}
}
class Worker extends Person
{
	Worker(String name)
	{
		super(name);
	}
}


-----http://www.itheima.comjava培训、android培训期待与您交流!-----




分享到:
评论

相关推荐

    黑马程序员----泛型学习注意点

    黑马程序员提供的这篇关于泛型的学习注意点,结合了源码分析和工具应用,旨在帮助开发者深入理解并有效运用泛型。下面将详细阐述泛型的主要知识点: 1. 泛型的基本概念: 泛型是Java SE 5.0引入的新特性,主要用于...

    黑马程序员----泛型与反射的小运用

    在Java编程语言中,泛型和反射是两个非常重要的特性,它们在软件开发中有着广泛的应用。本篇文章将深入探讨这两个概念以及它们在实际开发中的小运用。 首先,我们来看泛型(Generics)。泛型是在Java SE 5.0引入的...

    黑马程序员-Java语言进阶-源码、教程笔记.zip

    day02_Collection、泛型 day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流...

    黑马程序员Javase笔记

    Java是世界上最流行的编程语言之一,尤其在...总结来说,"黑马程序员Javase笔记"涵盖了Java的基础语法、内存管理、面向对象编程、集合框架以及泛型和Map等内容,这些都是成为一名合格Java开发者必须掌握的核心知识。

    黑马程序员匠心之作 C++教程_第7阶段-C++实战项目机房预约讲义.rar

    《黑马程序员匠心之作 C++教程_第7阶段-C++实战项目机房预约讲义》是为C++初学者量身定制的一份详细教学资源。这份讲义深入浅出地介绍了C++编程语言,并通过实际的机房预约系统项目,帮助学习者将理论知识与实践相...

    全网首发黑马程序员鸿蒙 HarmonyOS NEXT星河版零基础入门到实战,零基础也能快速入门鸿蒙开发教程2

    《全网首发黑马程序员鸿蒙 HarmonyOS NEXT星河版零基础入门到实战》是一套针对初学者精心设计的鸿蒙操作系统开发教程。本教程旨在帮助没有编程基础的学员快速掌握HarmonyOS的开发技能,通过丰富的实例和清晰的讲解,...

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    B站《黑马程序员匠心之作-C++教程从0到1入门编程,学习编程不再难》 配套笔记

    【标题】:“B站《黑马程序员匠心之作-C++教程从0到1入门编程,学习编程不再难》 配套笔记” 【描述】提及的是一个针对初学者的C++教学资源,来自B站上的视频课程“BV1et411b73Z”。这门课程的特色在于提供了一份...

    黑马程序员匠心之作 C++教程_第5阶段-C++提高编程资料讲义.rar

    《黑马程序员匠心之作 C++教程_第5阶段-C++提高编程资料讲义》是一份针对C++编程初学者精心制作的教程资料,旨在帮助学习者深入理解和提升C++编程技能。这份讲义涵盖了许多关键的C++知识点,下面将对其进行详细解读...

    黑马程序员入学面试题

    使用泛型可以确保类型安全性,避免ClassCastException等类型转换异常。 #### 53. 将用户输入在控制台上的指定路径下所有的.txt文件复制到c盘下随意目录(你可以自己指定路径)并在复制后将.txt后缀名更改成.java...

    黑马程序员面试宝典(java)2018版

    《黑马程序员面试宝典(java)2018版》是一本专门为Java开发者准备的面试指南,涵盖了大量在面试过程中可能遇到的问题和知识点。这本宝典由黑马程序员机构精心编纂,汇集了近万名学员的实际面试经验,为求职者提供了...

    黑马程序员C++教程讲义-保真

    黑马程序员的C++教程讲义会系统地介绍这些概念,帮助初学者从0到1逐步掌握C++编程。"assets"目录可能包含相关的辅助材料,如示例代码、图片或课件,这些资源可以增强学习体验,使理论与实践相结合。

    黑马程序员_Java基础辅导班教程课件[第01期]第13天

    在"黑马程序员_Java基础辅导班教程课件[第01期]第13天"中,我们聚焦于Java编程语言的基础知识,这是一门面向初学者的课程,旨在帮助学员快速掌握Java开发的基本技能。第13天的课程通常会涵盖上一天(第12天)所学...

    程序员C++提高编程PDF.pdf

    在黑马程序员的《程序员C++提高编程PDF》讲义中,特别针对泛型编程和STL技术进行了详细讲解,这表明了模板在C++编程中的重要性。 首先,讲义介绍了模板的基本概念,这可以通过生活中的模板类比来理解。模板就像是一...

    Java基础案例教程(第2版)_PPT.zip

    17. **泛型**:泛型引入后,可以在编译时检查类型安全,减少强制类型转换,提升代码的可读性和可维护性。 18. **注解(Annotation)**:注解提供了一种元数据,可以被编译器或JVM在运行时读取,用于配置和优化代码...

    黑马程序员入学Java知识(精华总结)

    ### 黑马程序员入学Java知识(精华总结) #### 一、Java概述与基础知识 ##### 1、何为编程? 编程是指使用计算机语言来编写指令,这些指令被计算机执行以完成特定任务的过程。通过编程,我们可以控制计算机的行为...

    黑马程序员入学Java知识——精华总结.doc

    程序员编写代码,计算机执行这些代码,最终产生预期的结果。 2. **Java语言的特点**: - **简单性**:Java简化了C++的一些复杂特性,如指针,使得初学者更容易上手。 - **面向对象**:Java强调类和对象,支持封装...

    黑马程序员.NET基础测试题

    【标题】:“黑马程序员.NET基础测试题”是一个与.NET编程相关的学习资源,主要针对初学者或正在参加黑马训练营的学员。这个测试题集旨在帮助他们检验和提升.NET技术的基础知识。 【描述】:资源中包含“黑马训练营...

    黑马程序员毕向东java基础课堂完整版文档

    《黑马程序员毕向东Java基础课堂完整版文档》是一份全面且深入的Java学习资源,由知名教育机构黑马程序员的讲师毕向东倾力打造。这份资料涵盖了从Java编程基础到高级特性的全过程,旨在帮助初学者系统地掌握Java编程...

Global site tag (gtag.js) - Google Analytics