泛型 边界 接口 &
2018-04-17 本文已影响23人
lkuo
先看代码:
public class test1 {
interface Game {
void play();
}
interface Program {
void code();
}
public static class People<T extends Program & Game> {
private T mPeople;
public People(T people) {
mPeople = people;
}
public void habit() {
mPeople.code();
mPeople.play();
}
}
public static class Aa implements Program, Game {
public Aa() {
}
@Override
public void play() {
System.out.println("Game play!");
}
@Override
public void code() {
System.out.println("Program code!");
}
}
public static void main(String[] arg1) {
Aa a = new Aa();
People<Aa> people = new People<>(a);
people.habit();
}
}
可以看到代码中 <T extends Program & Game>
这种写法,是指T是实现了Program和Game接口的类,泛型中没有集成接口的说法(没有implements)。
如果没有指明边界,类型参数将被擦除为 Object。
如果我们想要让参数保留一个边界,可以给参数设置一个边界,泛型参数将会被擦除到它的第一个边界(边界可以有多个),这样即使运行时擦除后也会有范围。