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;
	}
}

java泛型边界深入探讨,示例代码,布布扣,bubuko.com

时间: 2024-10-06 00:05:52

java泛型边界深入探讨,示例代码的相关文章

一个非常标准的Java连接Oracle数据库的示例代码

最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项"库",然后点击"添加外部Jar",选择"D:\Oracle\app\oracle\product\11.2.0\server \jdbc\lib\ojdbc6_g.jar"(注:D:\Oracle为数据库的安装路径). 2.以下代码为非常标准的Oracle数据库连接代码示例: /** * 一个非常标准的连接Oracl

Java泛型边界问题,super关键字

背景 Java给定一个具体的类型参数A之后的泛型List,与给定另一个具体的类型参数X的泛型List super或者extends可以定义一大类的泛型,作为给出具体类型参数的泛型的父类. super或者extends定义的有边界泛型,根据参数类型的层次覆盖判定和具体参数类型泛型之间的层次关系. 不要对super望文生义 super关键字,用于类的方法中表示指向父类对象的引用. 在泛型边界语法中指出泛型下界. 假设有继承关系,A <- B <- C <- D <- E void f(

Java连接Oracle数据库的示例代码

最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径 ->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择 “D:\Oracle\app\oracle\product\11.2.0\server \jdbc\lib\ojdbc6_g.jar”(注:D:\Oracle为数据库的安装路径). 2.以下代码为非常标准的Oracle数据库连接代码示例: /** * 一个非常标准的连接Oracle数据库的示例代码 */public void test

【转】一个非常标准的Java连接Oracle数据库的示例代码

原文地址: http://www.cnblogs.com/liuxianan/archive/2012/08/05/2624300.html 最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择“D:\Oracle\app\oracle\product\11.2.0\server \jdbc\lib\ojdbc6_g.jar”(注:D:\Oracle为数据库的安装路径). 2.以下代码为非

Java泛型的应用——T extends Comparable&lt;? super T&gt;

在观察Java源码的时候,发现了这么一个写法T extends Comparable<? super T>.不禁纳闷为什么要这么写呢?有什么好处吗,extends和super在这里的作用着实让人有点不清楚. 接下来,我将结合代码跟大家分享一下我关于这里泛型应用的看法. 1.  <T extends Comparable<? super T>>代表什么意思 大家可以明白的是这里应用到了Java的泛型,那么首先向大家说明一下这里extends的作用 extends后面跟的类

java 翻盖hashCode()深入探讨 代码示例

package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要的因素 就是:无论何时,对同一个对象调用HashCode都应该产生同样的值, * 如果你的HashCode方法依赖于对象中易变的数据,用户就要当心了,因为此数据发生变化 时 * HashCode就会生成一个不同的散列码,相当于产生一个不同的健 * 此外 也不应该使HashCode依赖于具有唯一性的对象信息,尤其是使用this的值,这只能很糟糕, * 因为这

java泛型擦除的神秘之处,边界处的动作,擦除的补偿

java泛型擦除的神秘之处 package org.rui.generics.erasure; public class HasF { public void f(){ System.out.println("hasf.f"); } } package org.rui.generics.erasure; /** * 边界 <T extneds Hasf>声明T必须具有类型HasF或者从Hasf导出的类型. * 如果情况确实如此,那么就可以安全地在obj上调用f()了 * T

java第15章示例代码

import java.util.Scanner; /** * * @author asus第15章示例代码1 全桂群2017.4.9 * */public class Registter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String uname, pw

左右JAVA示例代码事件分发和监督机制来实现-绝对原创有用

文章标题:左右JAVA示例代码事件分发和监督机制来实现 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy2012Email:[email protected]qq:    1046011462 一.场景如果 如果有博客系统中须要实现例如以下功能: 系统中用户公布文章.改动文章.删除文章时,须要一些相关的操作须要运行. 公布文章后,给好友发送邮件通知.给用户加积分,对文章做全文索引. 改动文章后,给好友发送邮