泛型[7]一个复杂泛型示例研究

 

java.util.Collections中有这样一个方法


这里是在定义泛型 添加extends限制时 使用了泛型通配符 作为类型。

publicstatic <TextendsComparable<? super T>>void sort(List<T>list)

 

意思就是说,传进来的这个类型T得实现/继承自Comparable<?super T>

Textends Comparable<?super T>

注意这里虽然Comparable是接口,但是依然是用extends,参见“定义&传递”章节extends interface小节。即

Timplements Comparable<?super T>

 

 Java Code 

 


public class Fruit {

}

class Apple extends Fruit implements Comparable<Object>{

    @Override
    
public int compareTo(Object o) {
        
return 0;
    }
    
}

//class Apple extends Fruit implements Comparable<Fruit>{
//
//  @Override
//  public int compareTo(Fruit o) {
//      return 0;
//  }
//  
//}
//
//class Apple extends Fruit implements Comparable<Apple>{
//
//  @Override
//  public int compareTo(Apple o) {
//      return 0;
//  }
//  
//}

这样不行
//class Apple extends Fruit implements Comparable<FujiApple>{
//
//  @Override
//  public int compareTo(FujiApple o) {
//      return 0;
//  }
//  
//}


class Pear extends Fruit{
    
}

class FujiApple extends Apple{
    
}

 

如果给Apple再嵌套泛型的时候,还可以这样

 Java Code 

 

class Apple<T> extends Fruit implements Comparable<Apple<T>>{

    @Override
    
public int compareTo(Apple<T> o) {
        
return 0;
    }
    
}

 

 Java Code 

 

ArrayList<Apple<Object>> list1 = new ArrayList<Apple<Object>>();
Collections.sort(list1);

ArrayList<Apple<
String>> list2 = new ArrayList<Apple<String>>();
Collections.sort(list2);

 

但实际上做实验的时候还手残写了这样的,并且这个在传Apple<Object>的时候还可以通过,但是在传apple<Integer>的时候就露馅了。

 Java Code 

 

这个只有TObject的时候可以编译通过
class Apple<T> extends Fruit implements Comparable<T>{

    @Override
    
public int compareTo(T o) {
        
return 0;
    }
    
}



这是因为传Object的时候带入Apple<T>中是

Apple<Object> extends Fruitimplements Comparable<Object>

是满足

Timplements Comparable<?super T>

Apple<Object>implements Comparable<? superApple<Object>>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值