专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java 17 泛型的使用方式(java泛型中通配符的形式不包括以下哪一种)

temp10 2024-10-16 15:56:10 java教程 9 ℃ 0 评论

Java 17 泛型的使用方式

在上一章中介绍了什么是泛型, 以及泛型的基础用法, 这一篇文章, 就说说泛型的常用方法以及注意事项。

思维导图

泛型方法(Generic Method)

在上一章的例子中介绍了定义类和接口时使用泛型的方式, 如果类和接口没有定义泛型, 而只在方法中定义泛型是可以的吗? 答案是可以的。并且从第一个支持泛型的版本中就支持, 也就是从 Java 1.5(Java 5) 开始的。

Java 17 泛型的使用方式(java泛型中通配符的形式不包括以下哪一种)

如何定义泛型方法呢?泛型的语法格式如下:

[修饰符] <T,S> 返回值类型  方法名([形参列表]){
    //方法内执行的内容
}

和普通的方法相比这两者有什么区别呢?

//普通的方法
static void testMethod(String[] arr){
    for (String t : arr) {
        System.out.println(t);
    }
}

可以看出来多出了 <T> 泛型声明。如果有多个泛型参数可以使用逗号(,)隔开。泛型的声明方式放到方法的修饰符和方法的返回值类型之间。

对于这个方法的泛型声明参数作用域和方法定义变量是一样的作用域, 只能方法里面使用。 这点和类和接口的泛型参数不一样。 注意区分其作用域。

因为泛型是通用的对象类型, 所以不能定义基础类型的参数。另外就是上面的测试代码可以定义成如下也不会有问题:

Integer[] intArray = new Integer[]{1, 2, 3};
testGenericMethod(intArray);

对于泛型方法可以允许泛型声明被用来标识方法的一个或者多个参数之间的依赖关系的,或者方法返回值与参数之间的依赖关系, 这里使用关键字 extends 。

格式的定义:

<T extends E>

还用上面的例子来说, 加以改造。先看一个错误的信息。

如果加上 extends 之后, T 就变成了泛型类型的子类。也就是继承了 E 。所以 T 就只能使用 GenericMethod2 或者他的子类。

需要注意的是, 对于所有的泛型不同的泛型类型不属于相同的类,List<String> 和 List<Integer> 是属于不同的类型。

缩写方式 <> 与构造器

对于从 Java 7 开始就有了新的缩写方式, 一开始的泛型使用是 List<String> list = new ArrayList<String> (); 后面构造泛型的时候可以省略只写成 new ArrayList<>();

并且对于构造器里面也可以使用泛型。

需要注意的是, 对于构造函数的泛型使用方式, 前后必须一致。

不一致的情况下就会出现如下的错误信息。

编译的时候也会有错误信息:

虽然对于 Java 也支持使用泛型数组的定义, 但是在使用中几乎不会用到该使用方式。后续有时间用到了, 再把这部分内容补充上。 现在正确尽快且详细的全部搞定。

每篇一句:对于软件开发没有银弹, 软件产品处于应用、用户、规则和硬件的合作之下。 这些所有的因素都在不断的变化,迫使软件产品也会随着改变。 我们要做的就是怎么学习底层思想, 应对这些变化。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表