泛型类中所定义的泛型,在方法中也可以使用。但是,我们经常需要仅仅在某一个方法 上使用泛型,这时候可以使用泛型方法。 泛型方法是指将方法的参数类型定义成泛型,以便在调用时接收不同类型的参数。类型 参数可以有多个,用逗号隔开,如:。定义时,类型参数一般放到返回值前面。 调用泛型方法时,不需要像泛型类那样告诉编译器是什么类型,编译器可以自动推 断出类型来。
非静态方法
可以使用定义在类中的泛型,也可以用定义在泛型方法中的泛型
定义格式
1、public <泛型表示符> void getName(泛型表示符 name){
}
2、public <泛型标识符> 泛型标识符 getName(泛型标识符 name){
}
package CommonClass.fanxing.fanxingMethod;
public class MethodGeneric {
public <T> void setName(T name){
System.out.println(name);
}
public <T> T getName(T name){
return name;
}
}
静态方法
静态方法中使用泛型时有一种情况需要注意一下,那就是静态方法无法访问类上定义的 泛型;如果静态方法操作的引用数据类型不确定的时候,必须要将泛型定义在方法上。
public static <泛型表示符号> void setName(泛型表示符号 name){
}
public static <泛型表示符号> 泛型表示符号 getName(泛型表示符号 name){
}
package CommonClass.fanxing.staticFanxing;
public class StaticMethodGeneric {
//无返回值的
public static <T> void setFlag(T flag){
System.out.println(flag);
}
//有返回值的
public static <T> T getFlag(T flag){
return flag;
}
}
package CommonClass.fanxing.staticFanxing;
public class Test {
public static void main(String[] args) {
StaticMethodGeneric.getFlag("好好学习"); //直接从类调用静态方法
StaticMethodGeneric.setFlag("天天向上");
String name=StaticMethodGeneric.getFlag("正确的事");
System.out.println(name);
Integer age=StaticMethodGeneric.getFlag(24);
System.out.println(age);
}
}
泛型方法与可变参数
在泛型方法中,泛型也可以定义可变参数类型。
public <泛型表示符号> void showMsg(泛型表示符号… agrs){
}
public class MethodGeneric {
public <T> void method(T...args){
for(T t:args){
System.out.println(t);
}
}
}
public class Test {
public static void main(String[] args) {
MethodGeneric methodGeneric=new MethodGeneric(); //调用非静态方法不能直接类调用
methodGeneric.method(1,2,3,4);
methodGeneric.method("a","b","c","d");
}
}