泛型方法:泛型不仅仅可以作用在类上,成为泛型类。也可以在方法中包含泛型。这样你的方法就会适用任何类型啦。同时我们要知道的泛型类和泛型方法没有任何关系就像(抽象类和抽象方法一样)。
定义泛型方法:只需要将泛型参数类别放在返回值之前。
public class GenericMtheds {
public <T> void test(T t){//泛型方法
System.out.println(t.getClass().getName());
}
public static void main(String[] args) {
GenericMtheds genericMtheds = new GenericMtheds();
genericMtheds.test(" ");
genericMtheds.test(1);
genericMtheds.test(0.f);
genericMtheds.test(5.5d);
genericMtheds.test(new UserService());
}
}
我们可以向test方法中传入任何类型的参数,也不需要我们提前指定类型,编译器为帮我们指定类类型。如果传入的是基本类型,则自己动打包机制就会加入其中,将基本类型的值包装为对应的对象。<br />** 注意事项:**<br /> 1.对于一个static的方法而言,无法去访问泛型类的类型参数(静态方法内部不能访问非静态域)。
public class GenericMethods <T>{
T t;
public <T> void f(T x){
}
public static void info(T t){
}
<br /> 2.静态方法也可以定义为泛型方法,此时的静态方法就可以去访问泛型类中类型参数
public class GenericMethods <T>{
T t;
public static <T> void info1(T t){
}
}
3.fianl修饰的方法也可以定义为泛型方法
public final <T> void info(){
}
可变参数与泛型方法两者之间可以很好的共存。
import java.util.ArrayList;
import java.util.List;
public class GnericVarargr {
public static <T> List<T> maker(T...args){
List<T> result = new ArrayList<>();
for (T itme:args){
result.add(itme);
}
return result;
}
public static void main(String[] args) {
List<String> a = maker("A");
System.out.println(a);
a=maker("A","B","C");
System.out.println(a);
a=maker("ABCDEFGHIJQLMN".split(""));
System.out.println(a);
List<Character> c = maker('1','2','3');
System.out.println(c);
}
}
我们可以看出,通过泛型和可比参数的结合,我们在给list容器指定一个类型后,可以传入任意长度的参数。