JAVA泛型-泛型方法的定义和使用

1.泛型方法的定义和语法

1.1 定义

泛型方法 是在调用方法的时候指明泛型的具体类型。
【泛型方法 能够使方法独立于类的处理指定的类型。】

1.2 语法

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

  • 修饰符与返回值类型中间的 泛型标识符 <T,E,…>,是 泛型方法的标志,只有这种格式声明的方法才是泛型方法。
  • 泛型方法声明时的 泛型标识符 <T,E,…> 表示在方法可以使用声明的泛型类型。
  • 与泛型类相同,泛型标识符可以是任意类型,常见的如T,E,K,V 等。
  • 泛型方法可以声明为 static 的,并且与普通的静态方法是一样的。

2.泛型方法的使用

2.1 普通泛型方法

声明

/**
 * author : northcastle
 * createTime:2021/10/23
 * 泛型方法的定义
 */
public class GenericMethod {

    //1.普通的泛型方法
    public <T> String commonMethod(String name,T t){
        String res = "";
        res += name +"-"+ t;
        System.out.println("普通泛型方法 : "+res);
        return res;
    }
}

调用

/**
 * author : northcastle
 * createTime:2021/10/23
 */
public class GenericMethodApplication {
    public static void main(String[] args) {
        //1.调用普通泛型方法
        GenericMethod genericMethod = new GenericMethod();
        String commonRes01 = genericMethod.commonMethod("001", "bb");
        System.out.println(commonRes01);
        String commonRes02 = genericMethod.commonMethod("002", 100);
        System.out.println(commonRes02);
        String commonRes03 = genericMethod.commonMethod("003", true);
        System.out.println(commonRes03);
        System.out.println("==================");
    }
}

运行结果

普通泛型方法 : 001-bb
001-bb
普通泛型方法 : 002-100
002-100
普通泛型方法 : 003-true
003-true
==================

2.2 静态泛型方法

声明

/**
 * author : northcastle
 * createTime:2021/10/23
 * 泛型方法的定义
 */
public class GenericMethod {

    //2.静态的泛型方法
    public static <T,E> String staticMethod(String name,T t,E e){
        String res = "";
        res += name +"-"+ t +"-"+ e;
        System.out.println("静态泛型方法 : "+res);
        return res;
    }
}

调用

package com.northcastle.genericmethod;

/**
 * author : northcastle
 * createTime:2021/10/23
 */
public class GenericMethodApplication {
    public static void main(String[] args) {
     
        //2.调用静态泛型方法
        String staticRes01 = GenericMethod.staticMethod("001", "aa", "bb");
        System.out.println(staticRes01);
        String staticRes02 = GenericMethod.staticMethod("002", 100, 'c');
        System.out.println(staticRes02);
        String staticRes03 = GenericMethod.staticMethod("003", 12.05d, false);
        System.out.println(staticRes03);
        System.out.println("==================");
   
    }
}

运行结果

静态泛型方法 : 001-aa-bb
001-aa-bb
静态泛型方法 : 002-100-c
002-100-c
静态泛型方法 : 003-12.05-false
003-12.05-false
==================

2.3 泛型方法中的可变参数

声明

/**
 * author : northcastle
 * createTime:2021/10/23
 * 泛型方法的定义
 */
public class GenericMethod {

    //3.带可变参数的泛型方法
    public <A> void argsMethod(A ... args){
        for (A arg : args) {
            System.out.println(arg);
        }
    }
}

调用

package com.northcastle.genericmethod;

/**
 * author : northcastle
 * createTime:2021/10/23
 */
public class GenericMethodApplication {
    public static void main(String[] args) {
     
        //3.调用可变参数的方法
        genericMethod.argsMethod(1,2,300,400,500,600);
        System.out.println("==================");
    }
}

运行结果

1
2
300
400
500
600
==================

3.完成

Congratulations!
You are one step closer to success!

  • 42
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java中,泛型是一种强类型机制,它可以让你在编译时检查类型错误,从而提高代码的安全性和可读性。在使用泛型时,我们经常会遇到父类和子类的泛型转换问题。 首先,我们需要明确一点:子类泛型不能转换成父类泛型。这是因为Java中的泛型是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类泛型转换成父类泛型,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类型,包括父类和子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类型。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 总结一下,Java中的泛型是不协变的,子类泛型不能转换成父类泛型。如果需要实现子类泛型转换成父类泛型,可以使用通配符来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值