网站首页 > java教程 正文
Java 17 泛型的使用方式
在上一章中介绍了什么是泛型, 以及泛型的基础用法, 这一篇文章, 就说说泛型的常用方法以及注意事项。
思维导图
泛型方法(Generic Method)
在上一章的例子中介绍了定义类和接口时使用泛型的方式, 如果类和接口没有定义泛型, 而只在方法中定义泛型是可以的吗? 答案是可以的。并且从第一个支持泛型的版本中就支持, 也就是从 Java 1.5(Java 5) 开始的。
如何定义泛型方法呢?泛型的语法格式如下:
[修饰符] <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 也支持使用泛型数组的定义, 但是在使用中几乎不会用到该使用方式。后续有时间用到了, 再把这部分内容补充上。 现在正确尽快且详细的全部搞定。
每篇一句:对于软件开发没有银弹, 软件产品处于应用、用户、规则和硬件的合作之下。 这些所有的因素都在不断的变化,迫使软件产品也会随着改变。 我们要做的就是怎么学习底层思想, 应对这些变化。
猜你喜欢
- 2024-10-16 Java泛型详解(完整版)必看(java 泛型 t)
- 2024-10-16 Java泛型最全总结(java泛型的实现原理)
- 2024-10-16 Java高级面试:Java的泛型实现机制是怎么样的?
- 2024-10-16 深入理解 Java 泛型(java泛型的实现原理)
- 2024-10-16 关于Java中的泛型使用你不知道的那些事?
- 2024-10-16 Java泛型机制详解;这些你都知道吗?
- 2024-10-16 Java中的泛型是什么?(java里面的泛型)
- 2024-10-16 学习廖雪峰的JAVA教程---泛型(使用泛型)
- 2024-10-16 Java泛型的好处及实现原理详解(java里泛型)
- 2024-10-16 java中的泛型是什么(java中泛型的理解)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)