java泛型方法作用_java泛型的作用与使用方法是什么?
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。对于java中的泛型它的作用与使用方法你了解吗?
泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。下面来具体讲解一下。
一、泛型的作用:
泛型提供的功能有:参数化类型,以及编译期类型检查。
1、参数化类型
在方法的定义中,方法的参数称为形参,在实际调用方法时传递实参。泛型的使用中,可以将类型定义为一个参数,在实际使用时再传递具体类型。将泛型这种使用方式称之为参数化类型。
在集合类的使用中,若不使用泛型,则需要对每一种元素类型设计相同的集合操作,例如:
class ListInteger{
//...
}
class ListDouble{
//...
}
通过泛型的使用,可以避免这种重复定义的现象,定义一套集合操作,来应对所有元素类型,例如:
class List{
//...
}
在使用中传递不同的元素类型给List即可。
这里使用的字符E并无特殊含义,只是为了便于理解而已。泛型中通常使用的字符及表示意义为:
K: 键值对中的key
V: 键值对中的value
E: 集合中的element
T: 类的类型type
2、编译期类型检查
对于集合ArrayList而言,若不指定具体元素类型,则使用过程中可能出现以下情况:
List list = new ArrayList();
list.add("abc");
list.add(123);
for (Object obj : list) {
String e = (String) obj;//ClassCastException
}
这段代码在编译期没问题,运行时会报出java.lang.ClassCastException。
这种对集合的使用方式存在两个问题:一是add添加元素时,因为元素声明为Object类型,任意类型元素都可以添加到集合中,所以在添加元素时需要使用者自己注意选择的元素类型;二是get取元素时需要强制类型转换,需要开发人员记住操作的元素类型,否则可能抛出ClassCastException异常。
在声明集合时指定元素类型则可以避免以上两种问题:
List list = new ArrayList();
list.add("abc");
//list.add(123); compile error
for (String obj : list) {
String e = obj;
}
通过泛型的使用,指定集合元素的类型,则可以在编译期就进行元素类型检查,并且get获取元素时无需进行强制类型转换。
这里称获取元素无需进行强制类型转换,其实并不准确,严格来讲,使用泛型在进行获取元素操作时,进行的是隐式类型转换,所以仍然存在强制类型转换的操作。
ArrayList中的隐式类型转换:
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
E elementData(int index) {
return (E) elementData[index];
}
二、泛型的使用
泛型可以应用于定义泛型类、泛型接口和泛型方法。
1、泛型类
泛型类的定义方式较为简单,通过将类型抽象为参数,附加在类名称后,即可完成泛型类的定义,示例:
public class Test {
public static void main(String[] args) {
User user = new User<>();
user.setAttribute(123);
// user.setAttribute("abc");compile error
Integer attribute = user.getAttribute();
}
}
class User {
private T attribute;
public User() {
}
public T getAttribute() {
return this.attribute;
}
public void setAttribute(T attribute) {
this.attribute = attribute;
}
}
通过使用泛型类,可以在编译期进行参数类型检查,并且使用时无需进行强制类型转换。
2、泛型接口
泛型接口的使用与泛型类较为相似,在接口名称后添加表示类型的字符即可,示例:
interface Person {
T getAttribute();
void setAttribute(T attribute);
}
3、泛型方法
在前面的泛型类中定义的如下方法:
public T getAttribute() {
return this.attribute;
}
public void setAttribute(T attribute) {
this.attribute = attribute;
}
虽然使用了参数化类型,但是并不算是泛型方法,因为这些方法中使用的参数类型是泛型类定义的。泛型方法中定义了自己使用的类型,示例:
public void genericsMethod(T parameter){
//...
}
版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。
java泛型方法作用_java泛型的作用与使用方法是什么?相关推荐
- java泛型的作用_Java 泛型的作用及其基本概念
一.泛型的基本概念 java与c#一样,都存在泛型的概念,及类型的参数化.java中的泛型是在jdk5.0后出现的,但是java中的泛型与C#中的泛型是有本质区别的,首先从集合类型上来说,java 中 ...
- java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等
java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...
- java泛型的作用和实现原理_java泛型的作用及实现原理
一.泛型的介绍 泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Ja ...
- java泛型优点_java泛型的作用和好处
转载于:https://blog.csdn.net/u012760183/article/details/52092692 之前参加面试的时候遇到面试官问泛型的作用,只是说了大概自己的理解, 在此转载 ...
- java class 关键字_java关键字及其作用
一. 关键字总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface ...
- java关键字的作用_java关键字及其作用
java关键字及其作用 java 关键字及其作用 一. 关键字总览:关键字 含义abstract 表明类或者成员方法具有抽象属性assert 用来进行程序调试boolean 基本数据类型之一,布尔类型 ...
- java中static作用_java中static作用详解
static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以修饰静态static代码块,但是Java语言中没有全局变量的概念. 被static ...
- java 泛型集合应用_Java泛型集合的应用和方法
展开全部 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以62616964757a686964616fe78988e69d8331333 ...
- java private 接口_java接口中 定义 private 私有方法
在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...
最新文章
- C++类成员函数在.cpp中设置成inline后无法解析的问题
- 阮一峰 《ECMAScript 6 入门》:let 和 const 命令
- 基于浏览器的开源“管理+开发”工具,Pivotal MySQL*Web正式上线!
- centos7 mysql5.6.34_CentOS7.0环境下MySQL5.6.34安装教程
- Cacti脚本及模板---PING
- oracle密码安全策略,提升Oracle用户密码安全性的策略
- linux设备符,linux 字符设备(一)
- 全国计算机绘图师第三期工业产品,工业产品类CAD技能等级考试试题集
- 百度竞价每天如何优化
- PHP外包简易加密后门
- 三角函数公式合集——从诱导公式到求导公式
- Android Arcgis入门、Callout气泡的显示
- 为什么现在更多需要用的是 GPU 而不是 CPU,比如挖矿甚至破解密码?
- 用python输出所有的玫瑰花数_python玫瑰花
- 下载谷歌play应用_在Google Play控制台上为应用设置发布并发布到内部曲目
- 华为云高校开发者青年班第七期——DevCloud的托马斯商城部署——知识点总结
- DeviceOne开发技术周报第二期-技术文章、优秀项目展示(四季旅行网,爱抢券)...
- 请用面向对象的思想,谈一谈这次面试的过程
- EasyCharts
- 【电子技术实验】555定时器秒脉冲时钟电路