泛型可以解决数据类型的安全问题,其主要方法是在类声明时通过一个标识表示类中的某个属性的类型或者方法返回值及参数的类型。
泛型类的定义格式如下:
[访问权限] class 类名称<泛型类型标识1,泛型类型标识2,...,泛型类型标识n> {
[访问权限] 泛型类型标识 变量名;
[访问权限] 泛型类型标识 方法名() {}
[访问权限] 泛型类型标识 方法名(泛型类型标识 变量名) {}
}
泛型对象定义格式如下:
类名称<具体类> 对象名称 = new 类名称<具体类>();
看上面的格式肯定是比较抽象,现在通过一个示例来使用泛型定义类并且声明对象:
//定义的类如下:
package net.jerryblog.generic;
public class Point<T> {
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
}
//使用泛型定义对象并使用
package net.jerryblog.generic;
public class PointDemo {
public static void main(String[] args) {
Point<Integer> pnt = new Point<Integer>();
pnt.setVar(30);
System.out.println(pnt.getVar());
}
}
上面的Point在定义时使用了<T>,T实际上表示此类型是由外部声明本类的对象时指定的。这里使用其他任何字母均可,只不过T是Type的简写,表示类型。这样比较好理解。
上面在new对象时,并没有直接指定成int,而是指定成Integer,这是因为泛型指定是无法指定基本数据类型的,必须指定成一个类。因此涉及基本类型时,就必须指定成其包装类。
如果设置的内容与泛型类型不一致时,编译时就会报错。看看下面的代码:
package net.jerryblog.generic;
public class PointDemo {
public static void main(String[] args) {
Point<Integer> pnt = new Point<Integer>();
pnt.setVar("30");
System.out.println(pnt.getVar());
}
}
上面的代码在使用Point类声明对象时指定类型为Integer,但是实际给Point的成员变量传递值的时候却传递的是String类型,那么在编译期,系统就会报错。而不采用泛型时,编译期间是不会出现错误的,运行期才会抛出ClassCastException异常。
要使用泛型为构造方法指定参数,其实原理也是一样的。
package net.jerryblog.generic;
public class Point<T> {
private T var;
public T getVar() {
return var;
}
public void setVar(T var) {
this.var = var;
}
public Point(T var) {
this.var = var;
}
}
package net.jerryblog.generic;
public class PointDemo {
public static void main(String[] args) {
Point<Integer> pnt = new Point<Integer>(30);
System.out.println(pnt.getVar());
}
}
如果一个类中有多个属性分别需要使用不同的泛型声明,则可以在定义类的时候使用多个泛型类型。见示例代码:
package net.jerryblog.generic;
public class MultiTypePoint<K,V> {
private K key;
private V value;
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
}
package net.jerryblog.generic;
public class MultiTypeDemo {
public static void main(String[] args) {
MultiTypePoint<Integer,String> pnt = new MultiTypePoint<Integer, String>();
pnt.setKey(1);
pnt.setValue("1");
System.out.println("key:" + pnt.getKey() + " value:" + pnt.getValue());
}
}
如果在定义类时使用了泛型,但是在实用类new对象时没有指定具体类型,在编译时系统会给出警告。但是在运行时,不会有问题。因为系统自动对所有的类型统一采用Object类型进行接收。这样的情况基本等同于下面的代码:
MultiTypePoint<Object,Object> pnt = new MultiTypePoint<Object, Object>();
参考书
《Java开发实战经典》 李兴华 编著
分享到:
相关推荐
学习Java泛型能够帮助我们更好地编写和使用通用的类、接口和方法。以下是从给定文件的标题、描述、标签和部分内容中提取出的详细知识点。 1. 泛型类和泛型方法: 在Java中,泛型可以应用于类、接口和方法。泛型类和...
java泛型详细学习,深入学习java的不二之选
泛型学习笔记2的源代码,泛型 : 要解决类型的安全问题, 如果使用Object类型会带来类型的损失。典型的应用就是在集合中, 集合中理论上可以保存任意对象,实际上我们应该让它泛型化,集合类<元素类型>, 添加元素...
在Java泛型出现之前,集合框架中的类如`List`、`Map`等都是以`Object`作为类型处理元素的。这意味着在使用这些集合时,往往需要频繁地进行类型转换操作,如: ```java List list = new ArrayList(); list.add("hello...
1. **泛型的基本概念** - **参数化类型**:泛型允许我们在创建集合或自定义类、接口时指定一种或多种类型参数,使得这些容器能够存储特定类型的对象,例如`ArrayList<E>`。 - **原始类型**:在泛型引入之前,集合...
基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
自己总结的java泛型的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
10. **泛型**:讨论Java泛型的使用,如何编写类型安全的代码,并理解其类型擦除的原理。 11. **枚举与注解**:介绍Java中的枚举类型及其用法,以及注解的定义和应用,它们在现代Java开发中有着广泛的应用。 12. **...
本资源为 Java 1.5 泛型指南中文版的详细笔记,涵盖了泛型的基础知识、泛型类、泛型方法、通配符、擦除和翻译、类型安全、类型参数、实际类型参数、擦除、翻译、转型和 instanceof、数组、Class Literals as Run-...
"Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...
此外,《JAVA学习笔记》还涵盖了集合框架,包括ArrayList、LinkedList、HashSet、HashMap等各种集合类的使用,以及泛型、迭代器和流API的应用。这些内容对于处理数据和实现复杂算法至关重要。 对于多线程编程,书中...
1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过`<>`语法糖使得创建泛型实例更为简洁,例如`List<String> list = new ArrayList();` 2. **钻石操作符**:在创建带...
【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性...通过深入学习和实践,你可以不断提升自己的Java编程能力。
Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...
这份《Java学习笔记》包含了丰富的知识内容,旨在帮助学习者全面掌握Java编程技术。笔记分为7个PDF部分,覆盖了从基础到高级的Java编程概念。 1. **Java基础知识**:这部分内容通常包括Java的历史背景、环境配置、...