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