Java的泛型高级篇

以前在看源码的时候,老是能够看见大写的字母:T D......

他就是用来标志泛型的。就拿ArrarList

Java的泛型高级篇_第1张图片

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 {
}

Java的泛型高级篇_第2张图片

再加一个supert1

public interface supert1 {
}

 ? super T: 包含T类型及其父类(继承、实现都能)所有

? extends T:包含T类型,及其子类(继承、实现都能)所有

public class fxt {
    List age;

    public  T get(T data) {
        return null;
    }

    public fxt(List 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 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基础,1024程序员节)