java泛型边界深入探讨,示例代码
package org.rui.generics.bounds;
import java.awt.Color;
/**
* 边界
* 下面展示了边界基本要素。
* @author lenovo
*
*/
interface HasColor{java.awt.Color getColor();}
class Colored
{
T item;
Colored(T item){this.item=item;}
T getItem(){return item;}
java.awt.Color color(){return item.getColor();}
}
///
class Dimensio{public int x,y,z;}//尺码
//!class ColoredDimension
class ColoredDimension
{
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 Solid
{
T item;
Solid(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;}
//
int getWeight(){return item.weight();}
}
//
class Bounded extends Dimensio implements HasColor,Weight
{
public int weight(){return 0;}
public Color getColor() {return null;}
}
//
public class BasicBounds {
public static void main(String[] args)
{
Solid solid=new Solid(new Bounded());
solid.color();
solid.getY();
solid.getWeight();
}
}
package org.rui.generics.bounds;
import java.awt.Color;
/**
* 边界
* 看上去包含可以通过继承消除沉余。
* 下面可以看到在继承的每个层次上添加边界的限制
* @author lenovo
*
*/
class holdItem
{
T item;
holdItem(T item){this.item=item;}
T getItem(){return item;}
}
interface HasColor2{java.awt.Color getColor();}
class Colored2 extends holdItem
{
//T item;
Colored2(T item){super(item);}
//T getItem(){return item;}
java.awt.Color color(){return item.getColor();}
}
///
class Dimensio2{public int x,y,z;}//尺码
class ColoredDimension2 extends Colored2
{
ColoredDimension2(T item){super(item);}
int getX(){return item.x;}
int getY(){return item.y;}
int getZ(){return item.z;}
}
///立方体///
interface Weight2{int weight();}
class Solid2 extends ColoredDimension2
{
Solid2(T item){super(item);}
int getWeight(){return item.weight();}
}
//
class Bounded2 extends Dimensio2 implements HasColor2,Weight2
{
public int weight(){return 0;}
public Color getColor() {return null;}
}
//
public class InheritBounds {
public static void main(String[] args)
{
Solid2 solid=new Solid2(new Bounded2());
solid.color();
solid.getY();
solid.getWeight();
}
}
package org.rui.generics.bounds;
import java.awt.Color;
import java.util.List;
/**
* 边界
* 多层次的示例
* @author lenovo
*
*/
interface SuperPower{}
//视觉
interface XRayVision extends SuperPower
{
void seeThroughWalls();
}
//听力
interface SuperHearing extends SuperPower
{
void hearSubtleNoises();
}
//闻
interface SuperSmell extends SuperPower
{
void trackBysmell();
}
//英雄;男主角
class SuperHero
{
POWER power;
SuperHero(POWER power){this.power=power;}
POWER getPower(){return power;}
}
//侦查
class SuperSleuth extends SuperHero
{
SuperSleuth(POWER power){super(power);}
void see(){power.seeThroughWalls();}
}
犬//
class CanineHero
extends SuperHero
{
CanineHero(POWER power){super(power);}
void hear(){power.hearSubtleNoises();}
void smell(){power.trackBysmell();}
}
///
class SuperHearSmell implements SuperHearing,SuperSmell
{
@Override
public void trackBysmell() {}
@Override
public void hearSubtleNoises() {}
}
///
class DogBoy extends CanineHero
{
DogBoy() {super(new SuperHearSmell());}
}
//
public class EpicBattle {
//bounds in generic methods
static
void userSuperHearing(SuperHero hero )
{
hero.getPower().hearSubtleNoises();
}
static
void sperFind(SuperHero hero)
{
hero.getPower().hearSubtleNoises();
hero.getPower().trackBysmell();
}
public static void main(String[] args)
{
DogBoy dogboy=new DogBoy();
userSuperHearing(dogboy);
sperFind(dogboy);
//YOU can do this
List extends SuperHearing> audioBoys;
//but you can 't do this:
//List extends SuperHearing & SuperSemll> audioBoys;
}
}
原文:http://blog.csdn.net/liangrui1988/article/details/28495219