泛型:可以在类或方法中预支地使用未知的类型。

注意: 一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。

          E - Element            (在集合中使用,因为集合中存放的是元素)   *
T - Type (Java 类)
K - Key (键)
V - Value (值)
N - Number (数值类型)

定义泛型:

编写的类,或者方法上, 灵活性更高, 类操作的数据类型不在由编写者确定, 预知未知的数据类型,

当使用者创建这个类的对象的时候, 由使用者根据他的需求, 确定数据类型不使用Object,

1. 获取数据, 返回的Object类型, 需要进行类型转换,  可能出现ClassCastException

2. 实际中, 集合操作的一组数据, 数据类型都是一样

【注意点】
1.对象实例化时不指定泛型,默认为:Object。
2.泛型不同的引用不能相互赋值。
3.加入集合中的对象类型必须与指定的泛型类型一致。
4.静态方法中不能使用类的泛型。
5.如果泛型类是一个接口或抽象类,则不可创建泛型
类的对象。
6.不能在catch中使用泛型
7.从泛型类派生子类,泛型类型需具体化

泛型的定义:

1. 在类上定义泛型

2. 在方法上定义泛型

3. 在接口上定义泛型

类中的泛型

public class GenericDemo1<T>{
//在类中使用这个泛型变量, 属性的数据类型
// 返回的返回值, 返回的参数
//定义一个属性
private T info; // 属性的数据类型: T的是什么. 数据类型就是什么 //在方法上使用, 使用泛型变量作为返回值类型
public T fun1(){
return info;
} //在方法的参数上使用
public void fun2(T param){
System.out.println("我是fun2()方法, 我的参数是:"+param);
}
}

方法中的泛型

public class GenericDemo2 {
//在方法上声明泛型
public <T> String fun1(T t){
return "fun1";
}
// 静态方法上使用泛型, 声明泛型变量, <E> 写static后面
public static <E> void fun3(E str){ }
// public void fun2(T t){ 错误 //
// }
}

接口中的泛型

//泛型接口
public interface GenericInterface<E> { public void fun1(E e);
} //实现类一
//实现类, 给接口的泛型变量赋一个数据类型: String
public class GenericInterfaceImpl implements GenericInterface<String>{ @Override
public void fun1(String e) { } } //实现类二
// 子类(子接口) 变成一个泛型类
public class GenericInterfaceImpl2<E> implements GenericInterface<E> { @Override
public void fun1(E e) { } public static void main(String[] args) {
//创建对象:
GenericInterfaceImpl2<String> gi = new GenericInterfaceImpl2<>();
gi.fun1("haha"); } }

泛型通配符   ?

public class Genericity_? {
public static void main(String[] args) { //使用泛型创建list
List<String> list=new ArrayList<>();
list.add("abc");
list.add("abb");
list.add("cba"); List<Integer> list1=new ArrayList<>();
list1.add(123);
list1.add(234);
list1.add(456); //调用打印list方法
printList(list);
printList(list1); // 这个方法 接收任意的数据类型元素的 List集合, 有一个警告, 参数List 使用泛型
// List<String> 但是list只能接收 元素是String的List集合 // List<Object> 注意: 泛型中,没有继承的关系 List<Object> list = new ArrayList<String>(); 错误
// 泛型变量
// ? 代表泛型变量是任意数据类型, 只能接收数据, 不能存储数据 // 限制? 范围 ? extends 类名A 上限 传递的数据类型 A类或者是A类的子类 理解
// ? super 类名A 下限: 传递的数据类型 A类或者A类的父类 } //打印list方法
public static void printList(List<?> list){// <? super Number> <? extends Number>
System.out.println(list);
}
}

泛型Genericity的更多相关文章

  1. Introduction of OpenCascade Foundation Classes

    Introduction of OpenCascade Foundation Classes Open CASCADE基础类简介 eryar@163.com 一.简介 1. 基础类概述 Foundat ...

  2. 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器

    1. 协议(Protocol):与OC之间唯一不同的是Swift中的协议不管是属性还时方法全部是必须实现的 /** protocol*/ protocol FullNamed { /** 计算属性申明 ...

  3. Introduction of Open CASCADE Foundation Classes

    Open CASCADE Foundation Classes Open CASCADE基础类 eryar@163.com 一.简介 1. 基础类概述 Foundation Classes Overv ...

  4. Java1.5泛型指南中文版(Java1.5 Generic Tutorial)

    Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 英文版pdf下载链接:http://java.sun.com/j2se/1.5/pdf/generics-tutori ...

  5. Java基础学习-泛型概述和测试

    1.举例 首先先用集合来写个自定义对象存储并且去遍历. package genericity; import java.util.ArrayList; import java.util.Collect ...

  6. 泛型&&枚举

    1.枚举类型 JDk1.5中新增了枚举类型,可以使用该功能取代以往定义常量的方式,同时枚举类型还赋予程序在编译时进行检查的功能. 1.1 使用枚举类型设置常量 以往设置常量,通常将常量放在接口中(fi ...

  7. Java Genericity

    四.  Java Genericity 1.  Genericity 泛型 泛型 <T> 1. 泛型就是参数化类型 2. 作用:安全,方便 3. 适用于对多种数据类型执行相同功能的代码,主 ...

  8. JAVA泛型知识(一)

    Java泛型知识(二)<? extends T>和<? super T> Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 目        录 ...

  9. Java系列之泛型

    自从 JDK 1.5 提供了泛型概念,泛型使得开发者可以定义较为安全的类型,不至于强制类型转化时出现类型转化异常,在没有反省之前,可以通过 Object 来完成不同类型数据之间的操作,但是强制类型转换 ...

随机推荐

  1. 干货--手把手撸vue移动UI框架: 滑动删除

    前言 前几天因为项目需要,用jquery写了一个swiperOut组件,然后我就随便把这个组件翻译成基于Vue的了,有兴趣的朋友可以看下.Github源码(不麻烦的话帮忙start,请各位大爷赏个星星 ...

  2. webapck之多页面打包(常见)

    webpack多入口打包 let path = require('path'); elt HtmlWebpackPlugin = require('html-webpack-plugin'); mod ...

  3. Promise,Generator,Await/Async

    上节中忘记讲:Iterator接口和Generator函数的关系了,Symbol.iterator方法的最简单的实现就是通过Generator函数: let myIterable = { [Symbo ...

  4. MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)

    hello,小伙伴们,好久不见,MySQL系列停更了差不多两个月了,也有小伙伴问我为啥不更了呢?其实我去看了MySQL的全集,准备憋个大招,更新篇长文(我不会告诉你是因为我懒的). 好了,话不多说,直 ...

  5. 最全Redis基础知识

    NoSQL概述 什么是NoSQL NoSQL不仅仅是SQL,它是Not Only SQL 的缩写,也是众多非关系型数据库的统称NoSQL和关系型数据库一样,也是用来存储数据的仓库. 为什么需要NoSQ ...

  6. 简说Python之图形初体验

    针对孩子,最容易引起小孩的感官认知的就是图形.因此,系统运用图形编程,可以更好地让孩子喜欢上编程. turtle叫做,Turtle graphics.是python第三方的画图模块工具.可以通过imp ...

  7. NoVNC API 文档翻译

    原文地址:https://github.com/novnc/noVNC/blob/master/docs/API.md 时间:2019-05-21     noVNC API The interfac ...

  8. C/C++、C#、JAVA(二):基本类型和转换操作

    基本类型和转换操作 数据类型 C语言中的基本类型如下. 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 si ...

  9. 《深入理解 Java 虚拟机》读书笔记:早期(编译期)优化

    正文 Java 语言的 3 类编译器: 前端编译器:把 java 文件 转变成 class 文件.例如:Sun 的 Javac. JIT 编译器(即时编译器):后端运行期编译器,把字节码转变成机器码. ...

  10. Python3 整数

    imag定义:返回整数的复数形式的虚部(返回整数).格式:intobject.imag real定义:返回整数的复数形式的实部(返回整数).格式:intobject.real conjugate()定 ...