http://blog.csdn.net/chjttony/article/details/6801406
1.泛型边界:
Java泛型编程时,编译器忽略泛型参数的具体类型,认为使用泛型的类、方法对Object都适用,这在泛型编程中称为类型信息檫除。
例如:
-
class
GenericType{ -
public
static
void
main(String[] args){ -
System.out.println(
new
ArrayList<String>().getClass()); -
System.out.println(
new
ArrayList<Integer>().getClass()); - }
- }
class GenericType{ public static void main(String[] args){ System.out.println(new ArrayList<String>().getClass()); System.out.println(new ArrayList<Integer>().getClass());}}
输出结果为:
java.util.ArrayList
java.util.ArrayList
泛型忽略了集合容器中具体的类型,这就是类型檫除。
但是如果某些泛型的类/方法只想针对某种特定类型获取相关子类应用,这时就必须使用泛型边界来为泛型参数指定限制条件。
例如:
-
interface
HasColor{ - java.awt.Color getColor();
- }
-
class
Colored<T
extends
HasColor>{ - T item;
- Colored(T item){
-
this
.item = item; - }
- java.awt.Color color(){
-
//调用HasColor接口实现类的getColor()方法
-
return
item.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(){
-
//调用HasColor实现类中的getColor()方法
-
return
item.getColor(); - }
-
//获取Dimension类中定义的x,y,z成员变量
-
int
getX(){ -
return
item.x; - }
-
int
getY(){ -
return
item.y; - }
-
int
getZ(){ -
return
item.z; - }
- }
-
interface
Weight{ -
int
weight(); - }
-
class
Solid<T
extends
Dimension & HasColor & Weight>{ - T item;
- Solide(T item){
-
this
.item = item; - }
- T getItem(){
-
return
item; - }
- java.awt.Color color(){
-
//调用HasColor实现类中的getColor()方法
-
return
item.getColor(); - }
-
//获取Dimension类中定义的x,y,z成员变量
-
int
getX(){ -
return
item.x; - }
-
int
getY(){ -
return
item.y; - }
-
int
getZ(){ -
return
item.z; - }
-
int
weight(){ -
//调用Weight接口实现类的weight()方法
-
return
item.weight(); - }
- }
-
class
Bounded
extends
Dimension
implements
HasColor, Weight{ -
public
java.awt.Color getColor{ -
return
null
; - }
-
public
int
weight(){ -
return
0
; - }
- }
-
public
class
BasicBounds{ -
public
static
void
main(String[] args){ -
Solid<Bounded> solid =
new
Solid<Bounded>(
new
Bounded()); - solid.color();
- solid.getX();
- solid.getY();
- solid.getZ();
- solid.weight();
- }
- }
interface HasColor{ java.awt.Color getColor();}class Colored<T extends HasColor>{ T item; Colored(T item){ this.item = item;}java.awt.Color color(){ //调用HasColor接口实现类的getColor()方法 return item.getColor();}}class Dimension{ public int x, y, z;}Class ColoredDimension<T extends Dimension &am
版权声明:本文为qq_43685474原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。