Java开发知识之Java中的泛型
Java开发知识之Java中的泛型
一丶简介什么是泛型.
泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了.
这样是可以的.
二丶Java中的泛型
Java中,所有类的父类都是Object类.所以定义泛型的时候,设计长须的话传入的值与返回的值都是Object类型为主.如果是用具体的实例,就要进行转换了.具体参考向上转型,跟向下转型.
JDK 1.5版本才有了泛型机制.
语法如下:
class 类名<T >{
public T a;
public T b;
public void SetNumber(T Number){
this.a = Number;
}
}
可以看到.其实数据类型都用T替换了. T我们可以定义为任何都是可以的.它只是代表一个类型而已.
使用的时候传入数据类型
创建实例:
类名<T> a = new 类名<T>();
int count = a.Add(10,11);
泛型可以传递多个泛型.可以代表更多的泛型.
代码如下:
public class Number<T,T1,T2> {
private T a;
private T1 b;
private T2 c;
public Number() {
// TODO 自动生成的构造函数存根
}
public void SetNumber(T Number) {
this.a = Number;
}
}
使用:
类名<T,T1> a = new <T,T1>();
我们可以看到.使用泛型的时候我们需要传递数据类型.去初始化这个类.这样的话这个类就叫做泛型类.
这中类型的类不会触发 ClasCastException异常的.因为在编译器中就可以检查类型匹配是否正确.
PS: 定义泛型类的时候.泛型名称一般是T来表达. 而容器的元素.,就使用E来表达.具体设置我们可以查询JDK 5.0以上的API看.
三丶泛型中需要注意的地方.
1.成员变量是数组
当成员变量是数组.我们可以定义数组,例如:
public T a[] ;
但是不能对其初始化
public T a[] = new T[10]; 这是错误的.
此时,我们只能设置Set方法.为数组赋值.
public void SetArray(T[] array) {
this.a = array;
}
而常规类可以
public int a[] = new int[10];
2.泛型类限制
我们的泛型类可以对其做限制.比如你必须继承某各类.或者实现某个借口才能使用这个类
具体语法;
public class <T extends AnyClass/Intface>
无论你是借口还是类.我们都要加上extends才可以. 意思就是说.如果指定了类.那么必须继承这个类你才能用.
如果传入接口.那么你必须实现这个接口才行.
使用:
类名<类/接口> a = new 类名<类/接口>();
`3.类型通配符
Java中针对泛型的限制,提供了类型通配符. 作用就是创建一个泛型类的对象的时候.
限制一下.这个泛型类的类型实现.或者继承某个接口,或类的子类.
简而意之就是常见对象的时候.我可以限制你.你必须实现那个类. 或者实现那个接口.
代码如下:
类名<? extends list> a = null; 泛型的话表示类型位未知
需要使用泛型对象的时候.单独实例化.
a = new A<ArrayList>(); ArrayList 是 List的子类. 意思就是.我可以在new对象的时候.传入它的子类.
或者某一类是实现指定接口的类.
总结: 总结来说,就是限制实例化, 如果指定了某一个类.那么创建实例的时候可以是它的子类. 如果指定了接口
那么可以是实现它接口的类都是可以的.
四丶泛型类的继承
我们的泛型类可以继承.跟普通类一样.只不过过了泛型而已. 泛型类也可以继承普通类.
语法:
public class Father<T>{
}
public class Child<T1,T2> extends Father<T>{
}
我们的Child子类.继承父类的时候,指明了它的泛型类型.如果不指定.则Child中的 泛型 (T1,T2)
都会自动的变成Object. 所以一般的情况下.都会保留父类的泛型.也就是指明一下.
五丶泛型总结
1.Java中的泛型是Object.可以在类声明上指明
1.类声明
class <T> {};
2.成员变量成名
public T a;
3.成员方法声明
public T AAA(T a, T b){}
2.泛型注意
泛型中,数组可以声明,但是不能对其初始化.或者new内存,比如提供方法.对其赋值.
3.Java中的其他语法
3.1 泛型限制
泛型中可以限制你必须继承某各类,并且传入的时候.比如是这个类.
语法:
public class Test<T extends 类/接口>{}
Test<类/接口> a = new Test<类/接口>();
3.2泛型限制,可以实现子类或者接口
在泛型限制的前提下.我们可以使用通配符.来表示一个类.这个类可以是我们指定的限制类的子类. 如果是接口,那么可以是实现接口的类.
语法:
class Test<? extends List>{};
使用:
Test <ArrayList> a = new Test<ArrayList>();
ArrayList是list的子类,满足 ? 这个通配符.
Java开发知识之Java中的泛型的更多相关文章
- Java开发知识之Java中的Map结构
Java开发知识之Java中的Map结构 一丶Map接口 Map没有实现Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每个Key只能映射一个Value ...
- Java开发知识之Java中的集合上List接口以及子类讲解.
Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...
- Java开发知识之Java中的集合Set接口以及子类应用
---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...
- Java开发知识之Java的枚举
Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...
- Java开发知识之Java的异常处理
Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...
- Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字
Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...
- Java开发知识之Java的继承多态跟接口*
Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...
- Java开发知识之Java的数字处理类Math类
Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...
- Java开发知识之Java的包装类
Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...
随机推荐
- python3 替换字符串中指定位置字符
大家都知道字符串在python中是不可变数据类型,那么我们如何替换字符串中指定位置的字符呢? 字符串转换列表替换并转换解决: def replace_char(string,char,index): ...
- flagSet 使用
var ( flagSet = flag.NewFlagSet("main", flag.ExitOnError) // 参数定义 version = flagSet.Bool(& ...
- 自然语言处理(四)统计机器翻译SMT
1.统计机器翻译三要素 1.翻译模型 2.语言模型 3.排序模型 2.翻译流程 1.双语数据预处理 2.词对齐 3.构造短语翻译表 4.对短语翻译表进行概率估计 5.解码,beam search 6. ...
- libevent入门介绍
libevent是之前看到的一个别人推荐的清凉级网络库,我就想了解一下它.今天下载到了一个人写的剖析系列,从结构和源码方面进行了简要分析.只是这个分析文章是2010年的,有点过时了(跟现在的libev ...
- phpstorm 断点调试 傻瓜教程
前言: 简单介绍下为什么要用断点调试,很多人说我在代码调试的部位用var_dump 或者 exit 或者print_r来进行断点,但是当项目足够大的时候这样的做法就比较费时费力,因为你断点后需要删除原 ...
- 企业IT管理员IE11升级指南【10】—— 如何阻止IE11的安装
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- 【安富莱原创开源应用第2期】基于RL-USB和RL-FlashFS的完整NAND解决方案,稳定好用,可放心用于产品批量
说明:0. NAND Flash这块经常有人咨询,这里发布一个完整的解决方案,支持擦写均衡,坏块管理,ECC和掉电保护. 早期的时候我们是用的自己做的NAND算法,支持滑块管理,擦写均衡 ...
- 深入理解Spring Redis的使用 (六)、用Spring Aop 实现注解Dao层的自动Spring Redis缓存
摘要: 主要针对Dao层的一些数据库查询的操作,数据实时性不强,直接加入缓存.当缓存中有的时候,就使用缓存中的数据.这样的方法,最终仅仅使用一个注解实现.对于之前的hibernate二级缓存使用,比较 ...
- WinRAR存在严重的安全漏洞影响5亿用户
WinRAR可能是目前全球用户最多的解压缩软件,近日安全团队发现并公布了WinRAR中存在长达19年的严重安全漏洞,这意味着有可能超过5亿用户面临安全风险. 该漏洞存在于所有WinRAR版本中包含的U ...
- Java编程题: 写一个Singleton出来
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 一般Singleton模式通常有几种种形式: 第一种形式: 定义一个类,它的构造函数为private的, ...