注:以下内容基于Java 8,所有代码都已在Java 8环境下测试通过
目录:
1. 定义泛型接口
类似泛型类的定义,泛型接口的定义格式如下:
interface 接口名 <泛型标记符1, 泛型标记符2……> {
}
比如,下面这个泛型接口:
interface TestInterface<T> {
T t;//编译时报错,接口中的变量会被隐式的指定为 public static final 变量
static void f(T t){//编译时报错,静态方法不能使用定义泛型接口时使用的泛型标记符
}
public abstract void print(T t);
}
泛型接口中的变量会被隐式的指定为 public static final 变量,因此泛型接口中的变量不可以使用定义泛型接口时使用的泛型标记符。同样,接口中的静态方法(Java8开始,接口里可以使用静态方法)也不能使用定义泛型接口时使用的泛型标记符。
2. 实现泛型接口
泛型类也可以继承,任何一个泛型类都可以作为父类或子类。不过泛型类在继承时需要注意以下几点:
-
类是泛型类,
interface TestInterface<T> { public abstract void print(T t); } //类中与接口同名的泛型标记符可以传递给接口 //类的泛型标记符包含接口的泛型标记符 class TestClass_1<T> implements TestInterface<T> { @Override public void print(T t) { System.out.println(t); } } class TestClass_2<T, U, V, W> implements TestInterface<T> { @Override public void print(T t) { System.out.println(t); } } //类的泛型标记符不包含接口中的泛型标记符 class TestClass_3<U, V, W> implements TestInterface<String > {//指明接口泛型参数的数据类型 @Override public void print(String s) {//注意,接口中使用泛型参数的函数也要做出相应的改变设置成String } } class TestClass_4<U, V, W> implements TestInterface{//未指明接口泛型参数的数据类型,则默认接口泛型参数是Object @Override public void print(Object o) {//注意,接口中使用泛型参数的函数也要做出相应的改变设置成Object } }
-
类不是泛型类
interface TestInterface<T> { public abstract void print(T t); } class TestClass_5 implements TestInterface<String> {//指明接口泛型参数的数据类型 @Override public void print(String s) {//注意,接口中使用泛型参数的函数也要做出相应的改变设置成String } } class TestClass_6 implements TestInterface {//未指明接口泛型参数的数据类型,则默认接口泛型参数是Object @Override public void print(Object o) {//注意,接口中使用泛型参数的函数也要做出相应的改变设置成Object } }