泛型中的边界与通配符

边界可以强制规定泛型可以应用的类型,更重要的是你可以将这个类型参数限制为某个类型子集,这样就可以调用这些类型的方法。

interface HasColor{ java.awt.Color getColor();}
class Dimension { public int x,y,z;}
//多边界,按类在前,接口在后的顺序
class ColoredDimension<T extends Dimension & HasColor>{
  T item;
  ColoredDimension(T item){ this.item=item;}
  T getItem() { return item;}
  java.awt.Color color() { return item.getColor();}
  int getX() {return item.x;}
  int getY() {return item.y;}
  int getZ() {return item.z;}
}

interface Weight { int weight();}
//采用继承来简化代码
class HoldItem<T>{
  T item;
  HoldItem(T item) { this.item=item;}
  T getItem() {return item;}
}
//让Colored2通过继承HoldItem,获得持有一个对象的能力
class Colored2<T extends HasColor> extends HoldItem<T> {
  Colored2(T item) { super(item);}
  java.awt.Color color() { return item.getColor();}
class ColoredDimension2<T extends Dimension & Weight> extends Colored2<T> {
  ColoredDimension2(T item) { super(item);}
  int getX() {return item.x;}
  int getY() {return item.y;}
  int getZ() {return item.z;}
}
class Cube<T extends Dimension & HasColor & Weight> extends ColorDimension2<T> {
  Cube(T item) { super(item);}
  int weight() { return item.weight();}
}

对泛型方法应用边界

interface SuperPower {}
interface SuperHearing extends SuperPower {
  void hearSubtleNoises();
}

class SuperHero<POWER extends SuperPower> {
  POWER power;
  SuperHero(POWER power) { this.power=power;}
  POWER getPower() { return power;}
}

public class EpicBattel {
  static <POWER extends SuperHearing> void useSuperHearing(SuperHero<POWER> hero){
    hero.getPower().hearSubtleNoises();
  }
  static <POWER extends SuperHearing & SuperSmell> void superFind(SuperHero<POWER> hero){
    hero.getPower().hearSubtleNoises();
    hero.getPower().trackBySmell();
  }
  public static void main(String[] args) {
    DogBoy dogBoy=new DogBoy();
    useSuperHearing(dogBoy);
  }
}





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值