1、自定义泛型---泛型方法
java程序中的普通方法,构造方法和静态方法中都可以使用泛型。方法使用泛型前,必须对泛型进行声明。语法:
<T>,T可以是任意字母,但通常必须 要大写。<T>通常需放在方法的返回值声明之前,如:
public <T> void method1(T t){}
注意:只有对象类型才能作为泛型方法的实际参数,在泛型方法中可以申请多个泛型参数。
public static <K, V>V getValue(K key){
return map.get(key);
}
2.自定义方法--泛型类
当一个类中的所有方法都采用的是泛型的时候,可以将此类定义为一个泛型类。这样其中的方法可以不用按普通方式书写,但都既有了泛型特性。如:
class MethodGenericDemo{
public <T> void method1(T t){
System.out.println(t);
}
public <T> void method2(T t){
System.out.println(t);
}
}
可以写成泛型类,如下:
class MethodGenericDemo<T>{
public void method1(T t){
System.out.println(t);
}
public void method2(T t){
System.out.println(t);
}
}
//值得注意的是,在泛型类中,泛型只能作用于非静态方法,对与静态方法,要使用泛型,依然需要使用泛型方法,如下:
class MethodGenericDemo<T>{
public void method1(T t){
System.out.println(t);
}
public void method2(T t){
System.out.println(t);
}
//泛型类只对非静态方法有效,对非静态方法无效
public static<T> void method3(T t){
System.out.println(t);
}
}
测试函数:
public class MethodGeneric {
public static void main(String[] args){
MethodGenericDemo demo = new MethodGenericDemo();
demo.method1(new String("aaa"));
demo.method2(new Integer(3));
}
}
3.泛型高级应用,通配符?
当接受的类型不确定时,可以使用?通配符,?可以指向任何类型,如下所示:
public static void print(Collection<?> c){ //Collection<?>发音为Collection of unknown
for(Object o:c){
System.out.println(o);
}
}
由于?指向的是一个不确定的类型,因此不能使用该对象调用一个和类有关的方法,因为有些其它类并没有此种方法,java在语法上会报错。只能调用和类无关的方法
4.泛型高级应用---有限制的通配符