Java 泛型之泛型受限制

package com.study.generics;

class GenericsControlClass<T> {	//T 泛型参数类型由外部指定
	
	private T variable;

	public T getVariable() {
		return variable;
	}

	public void setVariable(T e) {
		this.variable = e;
	}
 
	
	public String toString() {	//重写泛型类中的toString方法,
		return "泛型类的变量值为:"+this.variable;
	}
	
}

public class GenericsDemo05 {
	public static void main(String []args) {
		GenericsControlClass<String> controlClass = new GenericsControlClass<String>();
		controlClass.setVariable("泛型受限制");
		GenericsDemo05 demo05 = new GenericsDemo05();
		demo05.controlDisplay(controlClass);
		controlClass.setVariable("泛型受限制1");
		demo05.controlDisplay(controlClass);
		GenericsControlClass<Float> controlClass1 = new GenericsControlClass<Float>();
		controlClass1.setVariable(100.00f);
		//demo05.controlDisplay(controlClass1);//此处泛型受限制,抛出The method controlDisplay(GenericsControlClass<? extends String>) 
											//in the type GenericsDemo05 is not applicable for the arguments (GenericsControlClass<Float>)
	
		//此泛型受限制,且不可以传递Object对象
		//GenericsControlClass<Object> obj = new GenericsControlClass<Object>();
		//controlClass.setVariable(new Object("e2"));
		//demo05.controlDisplay(controlClass);
		//demo05.controlDisp(controlClass); 
                                //泛型不能向上转型
                                //GenericsControlClass<Object> obj1 = new GenericsControlClass<Object>();
                                 //obj1=controlClass;
	}
	
	public void controlDisplay(GenericsControlClass<? extends String> control) {	//泛型受限制,则使用extends 如:泛型类<? extends Object> 实例对象  泛型值可以使用String 和Object对象
		System.out.println(control);	//泛型类中不重写toString() 方法,则打印出来的是泛型类的对象。
	}
	
	public void controlDisp(GenericsControlClass<? extends Number> control) {	//泛型受限制,Number是所有数值型的基类,泛型参数类型可以为,Long ,Double,Float,等不可以为String等
		System.out.println(control);
	}
}

猜你喜欢

转载自zds420.iteye.com/blog/1109867