泛型 的通配符类型 extends super

package generic;

public class PairG<T> {

    T first;
    T second;
    public T getFirst() {
        return first;
    }
    public void setFirst(T first) {
        this.first = first;
    }
    public T getSecond() {
        return second;
    }
    public void setSecond(T second) {
        this.second = second;
    }
    
    
    public static void main(String[] args) {
        
        getPrintBuddy(new PairG<Employee>());
//        getPrintBuddy(new PairG<Manager>());//error
        
        getPrintBuddyE(new PairG<Employee>());
        getPrintBuddyE(new PairG<Manager>());
        
        
        getPrintBuddyS(new PairG<Employee>());
        getPrintBuddyS(new PairG<Manager>());
  
    /**
      设置器和访问器不太懂 */ }
//不能将参数类型传到静态方法 // public static T void method(T t){}//error //不能将 PairG<Manager> m 传递给这个方法 public static void getPrintBuddy(PairG<Employee> p){ Employee p1 = p.getFirst(); p.setFirst(new Employee()); } public static void getPrintBuddyE(PairG<? extends Employee> p){ //安全的访问器 Employee p1 = p.getFirst(); //编译器只知道Employee的类型,不知道具体的类型,所以拒绝传递任何特定的类型 // p.setFirst(new Employee()); //error } public static void getPrintBuddyS(PairG<? super Manager> p){ // Manager p1 = p.getFirst(); //error //安全的设置器 p.setFirst(new Manager()); } }

 

posted @ 2018-02-09 19:08  aLa神灯  阅读(125)  评论(0编辑  收藏  举报