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中的泛型的更多相关文章

  1. Java开发知识之Java中的Map结构

    Java开发知识之Java中的Map结构 一丶Map接口 Map没有实现Collection接口,提供的是Key 到Value的映射. Map中.不能包含相同的Key,每个Key只能映射一个Value ...

  2. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  3. Java开发知识之Java中的集合Set接口以及子类应用

    ---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...

  4. Java开发知识之Java的枚举

    Java开发知识之Java的枚举 一丶什么是枚举 枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字. 枚举跟C++概念都是一样的.就是特定的常 ...

  5. Java开发知识之Java的异常处理

    Java开发知识之Java的异常处理 一丶异常概述 在讲解异常之前,我们要搞清楚.什么是异常. 通俗理解就是我们编写的程序出问题了.进行处理的一种手段. 比如我们的QQ.有的时候就崩溃了.比如出现xx ...

  6. Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字

    Java开发知识之Java类的高级特性,内部类.以及包使用.跟常量关键字 一丶Java中包的机制 首先包其实就是个文件夹.作用就是管理类. Java中每次定义一个类的时候.通过Java编译之后.都会生 ...

  7. Java开发知识之Java的继承多态跟接口*

    Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...

  8. Java开发知识之Java的数字处理类Math类

    Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...

  9. Java开发知识之Java的包装类

    Java开发知识之Java的包装类 一丶什么是包装类 包装类的意思就是对基本数据类型封装成一个类.这些类都是Number的子类.区别就是封装数据类型不同.包含的方法基本相同. 具体可以查询JAVA A ...

随机推荐

  1. centos7系统下配置jdk环境变量

    用到的工具, Xshell5, Xftp5 现在的jdk7下载链接不好找, 打开下载界面, 全是jdk8的, 我这里提供了一份百度云的下载地址http://pan.baidu.com/s/1jHF9m ...

  2. 虚拟机上的Ubuntu 文件系统成为只读模式的解决办法

    虚拟机环境的Linux系统由于是虚拟化虚拟出来的主机环境,因此 经常会出现一些操作系统的问题,今天我遇到了一个Ubuntu操作系统文件系统成了只读模式,无法进行系统的操作,由于出问题的主机是我个人搭建 ...

  3. python多线程和多进程使用

    # 多线程 from concurrent.futures import ThreadPoolExecutor # 多进程 from concurrent.futures import Process ...

  4. centos7搭建本地 Remix

    由于最近要弄加入某联盟链,是基于ETH 所以要弄一个开发环境 一.准备 安装 nodejs,npm,git 二.安装 git clone https://github.com/ethereum/rem ...

  5. Round #2

    题源:来自hzwer整理的题 2014-5-10 NOIP模拟赛 by coolyangzc Problem 1 机器人(robot.cpp/c/pas) [题目描述] 早苗入手了最新的Gundam模 ...

  6. 权限组件之rbac

    rbac:基于角色的权限访问控制(Role-Based Access Control). rbac的主要流程:给每个角色赋予不同的权限,是这个角色的员工都有这个角色的所有权限.一个角色可以有多个人员担 ...

  7. .net Core 2.0应用程序发布到IIS上注意事项

    .net Core2.0应用程序发布window服务器报错容易错过的配置. 1.应用程序发布. 2.IIS上新建网站. 3.应用程序池选择无托管代码. 4.服务器上安装DotNetCore.1.0.1 ...

  8. 3-1.Hadoop单机模式安装

    Hadoop单机模式安装 一.实验介绍 1.1 实验内容 hadoop三种安装模式介绍 hadoop单机模式安装 测试安装 1.2 实验知识点 下载解压/环境变量配置 Linux/shell 测试Wo ...

  9. 【RL-TCPnet网络教程】第14章 RL-TCPnet之TCP客户端

    第14章      RL-TCPnet之TCP客户端 本章节为大家讲解RL-TCPnet的TCP客户端实现,学习本章节前,务必要优先学习第12章TCP传输控制协议基础知识.有了这些基础知识之后,再搞本 ...

  10. Java 延迟队列使用

    延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到…… 应用场景比较多,比如延时1分钟发短 ...