高级篇"/>
Java的泛型高级篇
以前在看源码的时候,老是能够看见大写的字母: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;}@Overridepublic 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;}@Overridepublic 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方法。
更多推荐
Java的泛型高级篇
发布评论