泛型类
泛型类派生子类
泛型接口
泛型接口实现类
泛型方法
类型通配符
- 泛型类的定义
class 类名称<泛型标识1,泛型标识2...>{
泛型标识 变量名
}
常用泛型标识(其实随意):T,E,K,V
package 泛型;
public class SSS<T,S> {
int a;
T b;
S c;
public SSS(int a , T b , S c) {
this.a = a;
this.b = b;
this.c = c;
}
void f(){
System.out.println(a+","+b+","+c);
}
}
package 泛型;
public class VV {
public static void main(String[] args) {
// 泛型在任何时候都不支持基本数据类型
// SSS<Integer,String> s = new SSS<Integer,String>(1,2,"小红");jdk1.8之前必须要在括号后面写上泛型
SSS<Integer,String> s = new SSS<>(1,2,"小红");//jdk1.8之后可以省略,甚至可以省略等号右边的<>
s.f();
}
}
结果:1,2,小红
- 父类是泛型类,子类如果也是泛型类,则子类要和父类的泛型类型一致
class Child<T> extends Father<T>
- 子类不是泛型类,父类要明确泛型的数据类型
class Child extends Father<String>
- 泛型接口定义
interface 接口名称<泛型标识,泛型标识2,...>{
泛型标识 方法名();
...
}
public interface CCC<T ,S> {
T f();
S f2();
}
-
实现类不是泛型类,就要明确数据类型
-
实现类也是泛型类,实现类和接口的泛型类型要一致
泛型方法
注意:泛型方法中的泛型类型独立于泛型
- 类型通配符一般使用"?"代替具体的类型实参
- 所以,类型通配符是类型实参,而不是类型形参