基本语法
interface 接口名 <T,R...> { }
注意细节
- 接口中,静态成员也不能使用泛型 (这个和泛型类规定一样)
- 泛型接口的类型,在继承接口或者实现接口时确定
- 没有指定类型,默认为Object 类
举例说明
public class Exercise06 {
public static void main(String[] args) {
}
}
interface IUsb<U,R>{
int n = 10;
//U name; 不能这样使用
//普通方法中,可以使用接口泛型
R get(U u);
void hi(R r);
void run(R r1,R r2,U u1,U u2);
//在jdk8中,可以在接口中,使用默认方法
default R method(U u){
return null;
}
}
//在继承接口,指定泛型接口的类型
interface IA extends IUsb<String,Double> {
}
// 当我们去实现 IA 接口时,因为 IA 在继承 IUsu 接口时,指定了 U为String,R为Double
// 所以在实现 IUsu 接口的方法时,使用String 替换U,使用Double 替换R
class AA implements IA {
@Override
public Double get(String s) {
return null;
}
@Override
public void hi(Double aDouble) {
}
@Override
public void run(Double r1, Double r2, String u1, String u2) {
}
}
//实现接口时,直接指定泛型接口的类型
//给U指定Integer,给R指定Float
//所以,当我们实现IUsb方法时,会使用Integer替换U,Float替换R
class BB implements IUsb<Integer,Float> {
@Override
public Float get(Integer integer) {
return null;
}
@Override
public void hi(Float aFloat) {
}
@Override
public void run(Float r1, Float r2, Integer u1, Integer u2) {
}
}
//没有指定类型,默认为Object
class CC implements IUsb { //等价 class CC implements IUsb<Object,Object>
@Override
public Object get(Object o) {
return null;
}
@Override
public void hi(Object o) {
}
@Override
public void run(Object r1, Object r2, Object u1, Object u2) {
} //等价 class CC implements IUsb<Object,Object>
}