程序比较简单,很容易看懂,主要是对泛型的限定:   <? extends E > ,  < ? super E  > 的理解和体会。 
不知之处还请学友多多提点。 
                                 
 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Comparator; 
import java.util.Iterator; 
import java.util.TreeSet; 
 
class Car{ 
        private String name ; 
        private int price ; 
         
        Car(String name , int price ){ 
                this.name = name ; 
                this.price = price ; 
        } 
         
        public String getName(){ 
                return name ; 
        } 
        public int getPrice(){ 
                return price ; 
        } 
} 
 
class Baoma extends Car{ 
        Baoma(String name , int price ){ 
                super( name , price ); 
        } 
} 
 
 
public class WildcardDemo { 
 
         
        /* 通过  printCollection 方法来演示  ? extends T */ 
         
        public static void printCollection( Collection<? extends Car> c){ // ? extends Car -----> Car c = (Car) ?类对象  ,向上转型 
                for( Iterator<? extends Car> it =  c.iterator() ; it.hasNext() ; ){ 
                        System.out.println( ( it.next()).getName() );  
                         
                        /*   ? 是最终父类(car)子类--则继承或 复写Car中的方法, 
                                  当  ?类的对象 在调用该方法时,   被上转型为它的最高父类 Car的对象 , 
                                  所以调用Car类中的方法,就可以实现各自不同的表现形式,既多态的特性。 
                                  这也就是  E extends ?  不限上限的原因。 
                        */ 
                } 
        } 
         
        public static void main(String[] args) { 
 
 
                ArrayList<Car> al = new ArrayList<Car>(); 
                al.add(new Car("car1" , 2222)); 
                al.add(new Car("car2" , 2333)); 
                al.add(new Car("car3" , 4222)); 
                printCollection(al); 
                 
                ArrayList<Baoma> all = new ArrayList<Baoma>( ); 
                all.add(new Baoma("baoma----1" , 2222)); 
                all.add(new Baoma("baoma----2" , 1333)); 
                all.add(new Baoma("baoma----3" , 4222)); 
                printCollection(all); 
                 
                 
                 
                /*下面通过 new TreeSet<E>((Comparator comparator) ) 来说明  ? super E  */ 
                 
                TreeSet<Car> ts = new TreeSet<Car>( new CarPriceComparator() );  
                ts.add(new Car("car1" , 2222)); 
                ts.add(new Car("car2" , 1333)); 
                ts.add(new Car("car3" , 4222)); 
                 
                 
                TreeSet< Baoma> tst = new TreeSet< Baoma>(new CarPriceComparator() );  //不用 (自己E)的比较器用 (父类?)的比较器 
                tst.add(new Baoma("car1-------" , 2222));                                                          //  E(Baoma) 表示自己所属的类 , ?(Car) 表示父类 , 
                tst.add(new Baoma("car2-------" , 1333));                                                  
                tst.add(new Baoma("car3-------" , 4222)); 
                 
                /* 
                 为什么子类可以用父类的比较器?  
                        子类掉用父类的比较器是,被上转型成父类对象 
                        但对父类没有没有限制,所以你用的是它的父类都行,  
                        父类比较器实现compare方法所调用的父类成员,子类都有(继承或复写)既可以通过编译 
                        这也就是  ? super E 不限上限的原因。 
                 */ 
                 
        }         
} 
 
 
/*车类的价格比较器*/ 
class CarPriceComparator implements Comparator< Car>{    
 
         
        public int compare(Car o1, Car o2) { 
                int num = new Integer(o1.getPrice() ).compareTo(new Integer(o2.getPrice()) ); 
                if(num == 0) 
                        return o1.getName().compareTo(o2.getName()); 
                return num ; 
        } 
} 
 
/*宝马类的价格比较器*/ 
class BaomaPriceComparator implements Comparator< Baoma>{         
 
        public int compare(Baoma o1, Baoma o2) { 
                int num = new Integer(o1.getPrice() ).compareTo(new Integer(o2.getPrice()) ); 
                if(num == 0) 
                        return o1.getName().compareTo(o2.getName()); 
                return num ; 
        } 
         
} 
 
 |   
        
 
    
    
    
     
 
 |