3.0、Java泛型 - 泛型方法

3.0、Java泛型 - 泛型方法

语法如下->

修饰符<T,E,...>返回值类型 方法名(形参列表) {
    方法体...
} 

1、public 与返回值中间 <T>(也就是泛型列表) 非常重要,可以理解为声明此方法为泛型方法;

2、只有声明了 <T> 的方法才是泛型方法,泛型类中使用了泛型的成员方法并不是泛型方法;[ 成员方法在调用时不需要指定类型,而在调用泛型方法的时候需要指定数据类型 ]

3、<T> 表明该方法将使用泛型的类型T ,此时才可以在方法中使用泛型类型T;

4、与泛型类的定义一样,此处 T 可以随便写为任意标识,常见的如 T、E、K、V 等形式的参数常用于标识泛型;

[ 注意:

        当成员方法用到泛型类的标识符时,不能将该成员方法定义为静态方法;因为静态方法和类同时加载,此时类还没有初始化也就还没有指定数据类型,所以此时的静态方法中的泛型还没有指定类型,所以编译报错;

        但是如果是泛型方法的话,Java规定->可以用 static 关键字修饰;]

泛型方法在调用时才会指定类型:

创建一个 Test.java 类型 ->

public class Test {
    
    //写一个方法testMethod泛型列表为 <E> 
    //返回值为 E
    //ArrayList<E> E至少需要和泛型列表中的一个标识保持一致
    public <E> E testMethod(ArrayList<E> list) {
        return list.get(0);
    }

}

 在 main() 方法中调用 testMethod() 方法 并指定类型为 String ->

public static void main(String[] args) {
	List<String> strList = new ArrayList<String>();
	list.add("字符串类型");
	Test t = new Test();
	t.testMethod(strList);
}

当泛型方法和泛型类的表示符相同时 ->

public class Test<E> {
    
    public <E> E testMethod(ArrayList<E> list) {
        return list.get(0);
    }

}
public static void main(String[] args) {
	List<String> strList = new ArrayList<String>();
	list.add("字符串类型");
	Test<Integer> t = new Test<Integer>();
	t.testMethod(strList);
}

        当泛型方法定义的标识符与他自己的泛型类一致时,不会相互影响,就算在初始化类的时候指定类型为 Integer ,在调用方法时指定泛型方法的类型为 String 那么在调动方法的时候类型依然是 String 而不是 Integer; 

 

泛型方法与可变参数 

定义语法 ->

public <E> void print(E... e) {

    for(E e1 : e) {
        System.out.println(e);
    }

}

总结一下:

        泛型方法能使方法独立于类而产生变化,所以我们在工作中能够用泛型方法解决的问题,尽量就不要再去定义泛型类了,泛型方法比起泛型类来说更为灵活多变;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值