内容导航:
- 前言
- 1、定义
- 2、泛型什么样子
- 3、泛型的作用
前言
JDK1.5以后,添加了对泛型的支持,主要应用在集合框架。
本节先学习泛型,为后续学习集合做好准备。
1、定义
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
Java语言引入泛型的好处是安全简单。
2、泛型什么样子
-
Class ArrayList<E>
声明一个泛型类ArrayList,其中E可以使用任意一个具体类型替代,泛型类型往往使用一个大写字母表示。 -
public boolean add(E o)
E是泛型,也就是说,使用add方法时,可以为其传递任意一种类型的参数。其中此处的E是在类中定义的。
3、示例代码
示例代码:
package com.company.project.demo020301;
//类:泛型类
public class GenericType<T> {
//属性
private T x;
@SuppressWarnings("unchecked")
public GenericType() {
super();
this.x = null;
this.x = (T) new Object() ;
}
public GenericType(T x) {
super();
this.x = x;
}
public T getX() {
return x;
}
public void setX(T x) {
this.x = x;
}
}
示例代码:
package com.company.project.demo020301;
import java.util.Date;
public class Client {
public static void main(String[] args) {
// 调用泛型类的无参构造方法
GenericType<Object> objectFoo1 = new GenericType<Object>();
// 调用泛型类的有参构造方法
GenericType<String> stringFoo = new GenericType<String>(new String("Hello Generics!"));
GenericType<Double> doubleFoo = new GenericType<Double>(new Double("99.00"));
GenericType<Object> objectFoo2 = new GenericType<Object>(new Object());
GenericType<Date> dateFoo = new GenericType<Date>( new Date());
System.out.println("objectFoo1.getX() :" + objectFoo1.getX());
System.out.println("stringFoo.getX() :" + stringFoo.getX());
System.out.println("doubleFoo.getX() :" + doubleFoo.getX());
System.out.println("objectFoo.getX() :" + objectFoo2.getX());
System.out.println("dateFoo.getX() :" + dateFoo.getX());
System.out.println("objectFoo1.getClass() :" + objectFoo1.getClass());
System.out.println("stringFoo.getClass() :" + stringFoo.getClass());
System.out.println("doubleFoo.getClass() :" + doubleFoo.getClass());
System.out.println("objectFoo.getClass() :" + objectFoo2.getClass());
System.out.println("dateFoo.getClass() :" + dateFoo.getClass());
}
}
运行结果:
objectFoo1.getX() :java.lang.Object@7852e922
stringFoo.getX() :Hello Generics!
doubleFoo.getX() :99.0
objectFoo.getX() :java.lang.Object@4e25154f
dateFoo.getX() :Mon Jun 01 17:11:57 CST 2020
objectFoo1.getClass() :class com.company.project.demo01.now.GenericType
stringFoo.getClass() :class com.company.project.demo01.now.GenericType
doubleFoo.getClass() :class com.company.project.demo01.now.GenericType
objectFoo.getClass() :class com.company.project.demo01.now.GenericType
dateFoo.getClass() :class com.company.project.demo01.now.GenericType
4、泛型的作用
Java中泛型的作用:简单安全。
在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
消除代码中的强制类型转换,同时获得一个附加的类型检查层,该检查层可以防止有人将错误类型的值保存在集合中。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
持续更新,欢迎留言提议!
码字很累,多点赞多赞赏!
扫描二维码,关注AT阿宝哥
网友评论