package com.study.generics;
//通过泛型方法,返回泛型类型实例
public class GenericsMethodDemo02 {
public static void main(String []args) {
GenericsMethodBackInstace<Float> demo02 = genericStaticMethod(100.33f);//如果传入100f则打印00.0
System.out.println(demo02.getVariable());
GenericsMethodDemo02 demo= new GenericsMethodDemo02();
GenericsMethodBackInstace<Integer> demo03 = demo.genericMethod(100);
System.out.println(demo03.getVariable());
//==================================
//因为泛型方法在GenericsMethodDemo02类型中定义则实例化调用本类的泛型方法
//在使用泛型方法返回实例化的类返回数据
GenericsBackInstace<String> demo04 = demo.geneMethod("泛型方法返回泛型类型实例化");
System.out.println(demo04.getVariable());
}
//为什么泛型的方法命名: public <泛型类> 返回泛型方法类 泛型方法命名
//方法中传入或返回的泛型类型由调用方法时所设置的参数类型决定
public static <Type extends Number> GenericsMethodBackInstace<Type> genericStaticMethod(Type t) {
GenericsMethodBackInstace<Type> instace = new GenericsMethodBackInstace<Type>();
instace.setVariable(t); //通过泛型方法传递参数,返回泛型实例
return instace;
}
public <Type extends Number> GenericsMethodBackInstace<Type> genericMethod(Type t) {
GenericsMethodBackInstace<Type> instace = new GenericsMethodBackInstace<Type>();
instace.setVariable(t); //通过泛型方法传递参数,返回泛型实例
return instace;
}
//================================================================
public <Type> GenericsBackInstace<Type> geneMethod(Type t) {
GenericsBackInstace<Type> instace = new GenericsBackInstace<Type>();
instace.setVariable(t);
return instace;
}
}
class GenericsMethodBackInstace<Type extends Number> { //泛型受限制,中哦<T extends Number>中的T 可以自定义
private Type variable; //T type简称
public Type getVariable() {
return this.variable;
}
public Type setVariable(Type variable) {
return this.variable=variable;
}
}
class GenericsBackInstace<Type> { //泛型受限制,中哦<Type>中的Type可以自定义如:Info,Object,String
private Type variable; //T type简称
public Type getVariable() {
return this.variable;
}
public Type setVariable(Type variable) {
return this.variable=variable;
}
}