- Java类
- Java包
- Java方法
- Java访问
- Java创建
- Java对象(Object)
- Java内部类
- Java继承
- Java抽象类
- Java泛型类
- Java异常
- Java接口
- Java枚举
- Java注解
Java泛型类
使用泛型(也叫通用),可以在不知道代码操作的对象的类型的情况下编写代码。 它允许创建通用类,构造函数和方法。泛型类是使用形式类型参数定义的。
形式类型参数是一个逗号分隔的变量名列表,放在类声明中类名后的尖括号<>
中。
语法
下面的代码声明一个类Wrapper
,它接受一个形式类型参数:
public class Wrapper<T> { }
上代码中,参数已命名为T
。T
是一个类型变量,它可以是Java中的任何引用类型,例如:String
,Integer
,Double
等。
当使用Wrapper
类时,要指定形式类型参数值。
实际参数
采用形式类型参数的类也称为参数化类。可以声明Wrapper
类的变量,将String
类型指定为其形式类型参数的值,如下所示。
Wrapper<String> stringWrapper;
这里,String
是实际的类型参数。
Java允许使用一个泛型类不指定形式类型参数。
用法
这是为了向后兼容。还可以声明Wrapper <T>
类的变量,如下所示:
Wrapper aRawWrapper;
当使用通用类而不指定实际的类型参数时,它被称为原始类型。 上面的声明使用Wrapper <T>
类作为原始类型,因为它没有指定T
类型的值。
通用类的实际类型参数必须是引用类型。原始类型不允许作为通用类的实际类型参数。
类可以采用多个正式类型参数。 下面的代码声明一个Mapper
类,它接受两个形式参数T
和R
:
public class Mapper<T, R> { }
可以声明Mapper <T,R>
类的变量如下:
Mapper<String, Integer> mapper;
这里,实际的类型参数是String
和Integer
。形式类型参数在类体中可用作类型。
public class Wrapper<T> { private T obj; public Wrapper(T obj) { this.obj = obj; } public T get() { return obj; } public void set(T obj) { this.obj = obj; } }
Wrapper <T>
类使用形式类型参数来声明实例变量obj
,以声明其构造函数和set()
方法的形式参数,以及作为get()
方法的返回类型。
可以通过为构造函数指定实际的类型参数来创建泛型类型的对象,如下所示:
Wrapper<String> w1 = new Wrapper<String>("Hello");
也可以省略实际的类型参数。 在下面的代码中,省略指定String
类型,编译器会将构造函数的实际类型参数推断为String
:
Wrapper<String> w1 = new Wrapper<>("Hello");
当声明了泛型类的一个变量,可以把形式类型参数看作是指定的实际类型参数。现在,可以认为,对于w1
,Wrapper
类的get()
方法返回一个String
。
String s1= w1.get();
示例
以下代码显示如何使用Wrapper
类。
public class Main { public static void main(String[] args) { Wrapper<String> w1 = new Wrapper<>("Hello"); String s1 = w1.get(); System.out.println("s1=" + s1); w1.set("Testing generics"); String s2 = w1.get(); System.out.println("s2=" + s2); w1.set(null); String s3 = w1.get(); System.out.println("s3=" + s3); } } class Wrapper<T> { private T obj; public Wrapper(T obj) { this.obj = obj; } public T get() { return obj; } public void set(T obj) { this.obj = obj; } }
执行上面代码,输出结果如下 -
s1=Hello s2=Testing generics s3=null
上一篇:Java抽象类和方法
下一篇:Java泛型约束
- Java教程
- Vim教程
- Swing教程
- Spring教程
- Spring Web Services教程
- Spring MVC教程
- Spring JDBC教程
- Spring Cloud教程
- Spring Boot教程
- Spring Boot CLI教程
- Spring Batch教程
- Spring AOP教程
- PDFBox教程
- JSP教程
- JSF教程
- JPA教程
- Java面向对象设计
- Java设计模式
- Java虚拟机教程
- Java泛型教程
- Java正则表达式教程
- Java数据类型教程
- Java并发编程教程
- Java密码学教程
- Java多线程教程
- Java国际化(i18n)教程
- JavaFX教程
- Java9教程
扫描二维码
程序员编程王