java泛型边界深入探讨,示例代码

31 篇文章 0 订阅

java泛型边界深入探讨,示例代码

package org.rui.generics.bounds;

import java.awt.Color;
/**
 * 边界
 * 下面展示了边界基本要素。
 * @author lenovo
 *
 */
interface HasColor{java.awt.Color getColor();}
class Colored<T extends HasColor>
{
	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<T extends HasColor & Dimensio>
class ColoredDimension<T extends Dimensio & 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 Solid<T extends Dimensio & HasColor & Weight>
{
	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<Bounded> solid=new Solid<Bounded>(new Bounded());
		solid.color();
		solid.getY();
		solid.getWeight();
	}
}

package org.rui.generics.bounds;

import java.awt.Color;
/**
 * 边界
 * 看上去包含可以通过继承消除沉余。
 * 下面可以看到在继承的每个层次上添加边界的限制
 * @author lenovo
 *
 */
class holdItem<T>
{
 T item;
 holdItem(T item){this.item=item;}
 T getItem(){return item;}
}

interface HasColor2{java.awt.Color getColor();}
class Colored2<T extends HasColor2> extends holdItem<T>
{
	
	//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<T extends Dimensio2 & HasColor2> extends Colored2<T>
{
	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<T extends Dimensio2 & HasColor2 & Weight2> extends ColoredDimension2<T>
{
	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<Bounded2> solid=new Solid2<Bounded2>(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 extends SuperPower>
{
 	POWER power;
 	SuperHero(POWER power){this.power=power;}
 	POWER getPower(){return power;}
}
//侦查
class SuperSleuth<POWER extends XRayVision> extends SuperHero<POWER>
{
	 SuperSleuth(POWER power){super(power);}
	 void see(){power.seeThroughWalls();}
}

犬//
class CanineHero<POWER extends SuperHearing & SuperSmell>
extends SuperHero<POWER>
{
	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<SuperHearSmell>
{
	DogBoy() {super(new SuperHearSmell());}
}
//
public class EpicBattle {
	//bounds in generic methods
	static <POWER extends SuperHearing> 
	void userSuperHearing(SuperHero<POWER> hero )
	{
		hero.getPower().hearSubtleNoises();
	}
	
	static <POWER extends SuperHearing & SuperSmell>
	void sperFind(SuperHero<POWER> 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;
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值