泛型方法:泛型不仅仅可以作用在类上,成为泛型类。也可以在方法中包含泛型。这样你的方法就会适用任何类型啦。同时我们要知道的泛型类和泛型方法没有任何关系就像(抽象类和抽象方法一样)。
定义泛型方法:只需要将泛型参数类别放在返回值之前。
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容器指定一个类型后,可以传入任意长度的参数。
