Java泛型-类型参数化
一. 泛型
解决支持多类型参数的方案:
1, 重载: 在同一个类中,方法名相同,参数不同
不足之处: 代码过于重复
public class Tool{
public String arrToStr(String[] arr, String symbol){
String str = "";
for(String v: arr){
str += symbol + v;
}
return str.substring(symbol.length());
}
public String arrToStr(int[] arr, String symbol){
String str = "";
for(int v: arr){
str += symbol + v;
}
return str.substring(symbol.length());
}
public String arrToStr(double[] arr, String symbol){
String str = "";
for(double v: arr){
str += symbol + v;
}
return str.substring(symbol.length());
}
}
2, 使用Object
好处: 简单
不足: 什么都支持(类型无法得到限制)
public class Tool{
public String arrToStr(Object[] arr, String symbol){
String str = "";
for(Object v: arr){
str += symbol + v;
}
return str.substring(symbol.length());
}
}
3, 泛型: 广泛的类型(默认为任意类型)
但是泛型可以设置上限(以继承的方式实现)
3.1 定义方法泛型
public class Tool{
//<X>: 程序员定义的一种数据类型即泛型,泛型名: X
//X : 默认为Object
public <X> String arrToStr(X[] arr, String symbol){
String str = "";
for(X v: arr){
str += symbol + v;
}
return str.substring(symbol.length());
}
//设置上限为Number
public static <X extends Number> String arrToStr(X[] arr, String symbol){
String str = "";
for(X v: arr){
str += symbol + v;
}
return str.substring(symbol.length());
}
}
3.2 类泛型定义
public class Datas <X>{
private X x;
public Datas(X x){
this.x = x;
}
public X getX(){
return x;
}
public void setX(X x){
this.x = x;
}
public static void main(String[] args) {
Datas datas = new Datas(50);
//不声明: X为Object
Datas datas1 = new Datas("哈哈");
Datas<Car> datas2 = new Datas<>(new Car("吉利",30));
//声明 X为 Car类型
Datas<Integer> datas3 = new Datas<>(50);
}
}
Java泛型-类型参数化的更多相关文章
- java泛型-类型擦除
详细内容:参考java编程思想P373,p650. Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就 ...
- java 泛型 类型作为参量 Class<T> transform
Class<T> transform T:作为类型,用于定义变量: transform:作为具体类的类:用于创建实例. 类型信息是脱敏的具体类: 可以使用class的具体功能: 不能使用具 ...
- java泛型 8 泛型的内部原理:类型擦除以及类型擦除带来的问题
参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首 ...
- java 泛型的类型擦除与桥方法
泛型类 --代码参考:java核心技术 卷1 第十版 public class Pair<T> { private T first; private T second; //构造器 pub ...
- java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- JAVA泛型中的有界类型(extends super)(转)
JDK1.5中引入了泛型(Generic)机制.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Ja ...
- Java泛型总结---基本用法,类型限定,通配符,类型擦除
一.基本概念和用法 在Java语言处于还没有出现泛型的版本时,只能通过Object是所有类型的父类和类型强制转换两个特点的配合来实现类型泛化.例如在哈希表的存取中,JDK1.5之前使用HashMap的 ...
- 类型擦除真的能完全擦除一切信息吗?java 泛型揭秘
背景 我们都知道泛型本质上是提供类型的"类型参数",它们也被称为参数化类型(parameterized type)或参量多态(parametric polymorphism).其实 ...
- Java 泛型,你了解类型擦除吗?
泛型,一个孤独的守门者. 大家可能会有疑问,我为什么叫做泛型是一个守门者.这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇.泛型是 Java 中一个很小巧的概念,但 ...
- java 泛型的内部原理:类型擦除以及类型擦除带来的问题
一.Java泛型的实现方法:类型擦除前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首要前提是理解类型擦出(ty ...
随机推荐
- WinDbg 分析 .NET Dump 线程锁问题
在定位 .NET 应用程序中的高 CPU 占用问题时,WinDbg 是非常强大的工具之一,尤其配合 SOS 扩展使用可以快速锁定"忙线程"或死锁等问题. 本文将基于一次实际的分析流 ...
- SQL解析工具JSQLParser
一.引言 JSQLParser(GitHub:https://github.com/JSQLParser/JSqlParser)是一个Java语言的SQL语句解析工具,功能十分强大,它可以将SQL语句 ...
- Qt图像处理技术五:图像的翻转(横向,竖向)
Qt图像处理技术五:图像的翻转(横向,竖向) 效果图 竖直翻转(两种方法): QImage Vertical(const QImage &origin) { QImage newImage(Q ...
- Spring 注解之@RequestBody和@PostMapping
@RequestBody的使用 注解@RequestBody用于接收前端传递给后端的.JSON对象的字符串,这些数据位于请求体中,适合处理的数据为非Content-Type: applicatio ...
- Huawei Matebook e 2022 安装 archlinux 双系统
本文同步发布于我的网站 安装之前 wifi 名称修改为英文+数字的,以防之后没法联网 准备好 U 盘并使用 GPT 分区表写入最新的 arch 镜像. 基础安装 开机按 F2 进入 UEFI/BIOS ...
- 【2020.11.25提高组模拟】太空漫步(walking) 题解
[2020.11.25提高组模拟]太空漫步(walking) 题解 题目描述 Do not go gentle into that good night. Old age should burn an ...
- java里面的高精度运算
1 package com.lv.study.am.first; 2 3 import java.math.BigDecimal; 4 5 public class TestBigDecimal { ...
- 一个开源免费、功能丰富的 WPF 自定义控件资源库
前言 今天大姚给大家分享一个开源免费(MIT license).功能丰富的 WPF 自定义控件资源库:WPF-ControlBase. WPF 介绍 WPF 是一个强大的桌面应用程序框架,用于构建具有 ...
- ArcObjects SDK 019 SpatialReference
1.SpatialReference的结构 ArcObjects SDK帮助中Esri.ArcGIS.Geometry命名空间帮助中的Object Model Diagram共两页,第一页就是Geom ...
- Windows系列操作系统,跳过开机密码直接登录
要让 **Windows 11** 在启动时 **自动登录**,跳过开机输入密码,通常不推荐直接修改注册表来实现,但如果你希望使用注册表实现这个效果,可以按如下方式操作: --- ## 方法:修改注册 ...