看了一篇很实用的java泛型文章,个人觉得很实用!!
Java泛型
在Java SE1.5中,增加了一个新的特性:泛型(日本语中的总称型)。何谓泛型呢?通俗的说,就是泛泛的指定对象所操作的类型,而不像常规方式一样使用某种固定的类型去指定。泛型的本质就是将所操作的数据类型参数化,也就是说,该数据类型被指定为一个参数。这种参数类型可以使用在类、接口以及方法定义中。
一、 为什么使用泛型呢?
在以往的J2SE中,没有泛型的情况下,通常是使用Object类型来进行多种类型数据的操作。这个时候操作最多的就是针对该Object进行数据的强制转换,而这种转换是基于开发者对该数据类型明确的情况下进行的(比如将Object型转换为String型)。倘若类型不一致,编译器在编译过程中不会报错,但在运行时会出错。
使用泛型的好处在于,它在编译的时候进行类型安全检查,并且在运行时所有的转换都是强制的,隐式的,大大提高了代码的重用率。
二、 泛型的简单例子:
首先,我们来看看下面两个普通的class定义
public class getString {
private String myStr;
public String getStr() {
return myStr;
}
public void setStr(str) {
myStr = str;
}
}
public class getDouble {
private Double myDou;
public Double getDou() {
return myDou;
}
public void setDou(dou) {
myDou = dou;
}
}
这两个class除了所操作的数据类型不一致,其他机能都是相同的。现在,我们可以使用泛型来将上面两个class合并为一个,从而提高代码利用率,减少代码量。
public class getObj<T> {
private T myObj ;
public T getObj() {
return myObj;
}
public void setObj<T obj> {
myObj = obj;
}
}
那么,使用了泛型后,如何生成这个class的实例来进行操作呢?请看下面的代码:
getObj<String> strObj = new getObj<String>();
strObj.setObj(“Hello Nissay”);
System.out.println(strObj.getObj());
getObj<Double> douObj = new getObj<Double>();
douObj.setObj(new Double(“116023”));
System.out.println(douObj.getObj());
三、 例子分析
现在我们来分析上面那段蓝色字体的代码:
1、<T>是泛型的标记,当然可以使用别的名字,比如。使用<T>声明一个泛型的引用,从而可以在class、方法及接口中使用它进行数据定义,参数传递。
2、<T>在声明的时候相当于一个有意义的数据类型,编译过程中不会发生错误;在实例化时,将其用一个具体的数据类型进行替代,从而就可以满足不用需求。
四、 泛型的规则和限制
通过上述的例子,我们简单理解了泛型的含义。在使用泛型时,请注意其使用规则和限制,如下:
1、泛型的参数类型只能是类(class)类型,而不能是简单类型。
比如,<int>是不可使用的。
2、可以声明多个泛型参数类型,比如<T, P,Q…>,同时还可以嵌套泛型,例如:<List<String>>
3、泛型的参数类型可以使用extends语句,例如<T extends superclass>。
4、泛型的参数类型可以使用super语句,例如< T super childclass>。
5、泛型还可以使用通配符,例如<? extends ArrayList>
五、 扩展
1、extends语句
使用extends语句将限制泛型参数的适用范围。例如:
<T extends collection> ,则表示该泛型参数的使用范围是所有实现了collection接口的calss。如果传入一个<String>则程序编译出错。
2、super语句
super语句的作用与extends一样,都是限制泛型参数的适用范围。区别在于,super是限制泛型参数只能是指定该class的上层父类。
例如<T super List>,表示该泛型参数只能是List和List的上层父类。
3、通配符
使用通配符的目的是为了解决泛型参数被限制死了不能动态根据实例来确定的缺点。
举个例子:public class SampleClass < T extends S> {…}
假如A,B,C,…Z这26个class都实现了S接口。我们使用时需要使用到这26个class类型的泛型参数。那实例化的时候怎么办呢?依次写下
SampleClass<A> a = new SampleClass();
SampleClass<B> a = new SampleClass();
…
SampleClass<Z> a = new SampleClass();
这显然很冗余,还不如使用Object而不使用泛型,呵呵,是吧?
别着急,咱们使用通配符,就OK了。
SampleClass<? Extends S> sc = new SampleClass();
只需要声明一个sc变量,很方便把!
分享到:
相关推荐
泛型是Java编程语言中的一个重要特性,它引入于JDK 5.0,极大地提高了代码的类型安全性和可读性。泛型允许我们在类、接口和方法中使用类型参数,这样我们可以在编译时检查类型,避免了运行时类型转换的麻烦和潜在的...
在Java泛型中,`T`是最常见的类型参数。它代表“Type”,即一种类型。当我们定义一个泛型类或方法时,可以使用`T`作为类型参数的占位符,表示任何类型的引用数据类型都可以被传入。例如,在创建一个泛型类`Box<T>`时...
Java泛型与容器详细笔记涉及到Java编程语言中的两个重要概念:泛型(Generics)和容器(Containers)。容器主要包括Java集合框架中的各类集合类,如List、Set、Map等,它们用于存储和操作数据。泛型则提供了一种类型...
Java泛型是一项强大而实用的功能,它提高了代码的安全性和可读性。然而,正确理解和使用泛型需要深入掌握其背后的核心概念,特别是类型擦除机制。尽管存在一定的局限性,泛型仍然是现代Java开发不可或缺的一部分,...
Java泛型与集合是Java编程中的核心概念,它们在实际开发中扮演着至关重要的角色。本书"Java Generics and Collections"深入探讨了这两个主题,帮助开发者编写更安全、更高效且可维护的代码。 首先,让我们来理解...
JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的...从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。
8. **Java泛型**: 泛型提高了代码的类型安全性和重用性。这部分可能涉及泛型类、泛型方法和通配符。 9. **Java Swing和JavaFX**: 对于图形用户界面(GUI)开发,Weiss的资源可能包含了Swing组件的使用,如JFrame、...
11. **Java标准库**:Java提供了一套丰富的标准库,包括各种实用工具类和API,如Collections、Arrays、Math等。熟练使用这些类库可以极大地提高编程效率。 《Head First Java》书中包含了许多互动练习和实例,旨在...
8. **泛型**:自Java 5引入,泛型提高了代码的类型安全性和重用性,如`List<String>`。 9. **注解(Annotation)**:自Java 5开始,注解提供了一种向编译器或JVM传递元数据的方式,如`@Override`、`@Deprecated`。 ...
在Java编程领域,"尚硅谷_宋红康_20天Java核心_资料工具" 提供的是一套全面且实用的学习资源,旨在帮助开发者深入理解Java的核心概念和技术。Java是一种广泛应用于互联网开发、企业级应用、大数据处理等领域的面向...
这个程序对于学习音乐理论、Java编程或者想要在数字环境中创作音乐的人来说,是一个非常实用的工具。下面我们将深入探讨这个程序涉及到的Java编程知识和音乐编辑相关技术。 一、Java基础知识 1. Java窗口界面:Java...
在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的标准API,而泛型是Java SE 5.0引入的一种强大的类型系统特性。"java增删改查JDBC封装类(泛型封装)"这个主题是关于如何利用泛型来优化...
很实用的泛型讲解,很详细的,泛型学习必备!
3. **泛型**:第二版《Effective Java》详尽讨论了Java泛型,包括其基本概念、类型擦除、边界通配符、类型推断以及如何有效地使用泛型类和泛型方法。 4. **构造器**:书中阐述了如何设计和使用构造器来创建对象,...
14. **Java集合框架高级**:了解List、Set、Map接口的高级特性和实用类,如TreeSet、TreeMap、LinkedHashMap等。 15. **Java 8新特性**:Lambda表达式、函数式接口、Stream API和日期时间API的使用。 通过解答这些...
《Java_2实用教程(3版)实验代码及答案》是一个专门为学习Java编程语言的人们设计的资源包,它包含了该教程第三版的所有实践练习的源代码和解答。这个资源对于那些正在通过这本书进行自我学习或者在课堂上使用此...
本压缩包集合涵盖了多种实用的jar包,旨在提供对不同数据库的连接支持,SSH(Spring、Struts、Hibernate)框架整合所需的依赖,以及针对J2EE开发的常用工具包,特别是Struts2.0框架。 1. **数据库连接包**: - ...
Java编程语言以其强大的功能和广泛的应用领域而深受程序员的喜爱,尤其对于初学者,掌握一系列实用的Java示例是提升技能的关键。"Java_100examples.rar" 是一个专门为了帮助学习者深入理解和实践Java编程而编译的...
Java是一种广泛使用的面向对象的编程语言,以其跨平台...这份80页的学习笔记详细讲解了这些核心概念,并使用了彩色标记突出重点内容,对于新手复习和查询非常实用。建议下载阅读,通过实践加深理解,逐步掌握Java编程。