以前在看源码的时候,老是能够看见大写的字母:T D......
他就是用来标志泛型的。就拿ArrarList
E就是 :element的简写
T就是Type。
另外一种就很高级,父级和自己约束性泛型:
定义一个顶级父类:TimeTest
public interface TimeTest extends supert1 { }
然后t1实现它:
public class t1 implements TimeTest { String name; public t1(String name) { this.name = name; } @Override public String toString() { return name; } }
t2也是实现它:
public class t2 implements TimeTest { }
t3则继承t2:
public class t3 extends t2 { }
再加一个supert1
public interface supert1 {
}
? super T: 包含T类型及其父类(继承、实现都能)所有
? extends T:包含T类型,及其子类(继承、实现都能)所有
public class fxt {
List<? super t2> age;
public <T extends t2> T get(T data) {
return null;
}
public fxt(List<? super t2> age) {
this.age = age;
}
@Override
public String toString() {
String s = "";
for (Object o : age) {
s += o + ",";
}
return s;
}
public static void main(String[] args) {
ArrayList<supert1> list = new ArrayList<>();
list.add(new t1("1"));
list.add(new t1("2"));
list.add(new t1("3"));
fxt fxt = new fxt(list);
System.out.println(fxt);
fxt.get(new t4());
}
}
因为supert1是父类的父类,所以super标识是可以怎么做的。
extends也是同样的道理:
加一个t4继承t3(t3继承了t2,所以也是可以用的):
public class t4 extends t3 {
}
也许你会觉得多此一举,因为这样就是在约束使用者,例如A接口有get方法,我在框架中只需要调用即可,只要是使用我的方法,一定会实现A接口,就必定有get方法。