关键词:
目录
1.泛型的定义
2.泛型的使用
3.泛型通配符
一、泛型的定义
泛型是java5的新特性,使用泛型会让程序编写简单安全,在编译的时候就会检查类型是否安全
定义:所谓泛型就是允许在定义类、接口和方法使用参数类型这个类型形参可以在声明变量、
创建对象、调用方法时动态指定(类型实参)泛型的参数类型只能是引用类型,不能是基本类型
二、泛型的使用
1.泛型接口
泛型接口格式:
修饰符 interface 接口名<T...>{}
泛型接口Demo:
public interface Action<E> { //在接口中使用泛型E E getE(); //在接口中使用泛型抽象方法 <T> T getT(int i); }
2.泛型类
泛型类格式:
修饰符 class 类名<T...>{
使用T; }
泛型类Demo:
//类上声明泛型E public class ActionImpl<E>{ //声明E类型变量 private E e; //使用E类型 public E getE() { // TODO Auto-generated method stub return e; } public ActionImpl(E e){ this.e = e ; } }
3.泛型方法
泛型方法格式:
修饰符<T...> 返回值 方法名 (参数列表){
使用T; }
泛型方法Demo:
public class GenericWay { //方法上声明泛型T类型 public static <T> T get(T t){ return t; } }
三、泛型通配符
泛型通配符的符号是?
普通的泛型与泛型通配符的泛型Class<T>与Class<?>的区别在于:
Class<T> :在实例化的时候,T需要替换成具体的类型
在泛型类、方法中可以使用T,还可以操作T类型的变量
Class<?>:他是通配符,?可以表示任何类型(使用了泛型)
泛型通配符可以匹配任意类型。
泛型通配符Demo:
import java.util.ArrayList; import java.util.List; public class GWC { //参数是list,list里的类型可以是任意类型 public void forList(List<?> l){ for (Object object : l) { System.out.println(object); } } public static void main(String[] args) { GWC gwc = new GWC(); List<Integer> l1 = new ArrayList<>(); l1.add(1); l1.add(2); gwc.forList(l1); List<String> l2 = new ArrayList<>(); l2.add("1"); l2.add("2"); gwc.forList(l2); } }
通配符上限
举个栗子:
List<? extends Number> 这么声明的数只能是number类型或number类型的子类
通配符上限Demo:
import java.util.ArrayList; import java.util.List; public class GWCTop { public void forList(List<? extends Number> l){ for (Number number : l) { System.out.println(number); } } public static void main(String[] args) { GWCTop gwcTop = new GWCTop(); //Object 类型是number类型的父类编译报错; //List<Object> list = new ArrayList<>(); //String 类型不是number编译器报错; //List<String> list = new ArrayList<>(); List<Number> list = new ArrayList<>(); gwcTop.forList(list); } }
通配符下限
举个栗子:
List<? super Number> 这么声明的数只能是number类型或number类型的父类
通配符下限Demo:
import java.util.ArrayList; import java.util.List; public class GWCUnder { public void forList(List<? super Number> l){ for (Object object : l) { System.out.println(object); } } public static void main(String[] args) { GWCUnder gwcUnder = new GWCUnder(); //Integer 类型是Number类型的父类,编译不通过; //List<Integer> list = new ArrayList<>(); //String 类型不是Number类型的父类,编译不通过; //List<String> list = new ArrayList<>(); List<Object> list = new ArrayList<>(); gwcUnder.forList(list); } }
尚硅谷_java零基础教程(泛型generics)--学习笔记(代码片段)
Java泛型一、为什么要有泛型1、为什么要有泛型(Generic)2、泛型的概念二、在集合中使用泛型三、自定义泛型结构1、自定义泛型结构1.1、泛型类、泛型接口1.2、泛型方法2、自定义泛型demo四、泛型在继承上的体现五、通配符的使用... 查看详情
java学习整理之java泛型(代码片段)
一、一个困惑泛型我们经常会看到或者使用,这里首先记录一个自己曾经的困惑,下面的两个泛型方法有什么区别?publicvoiddosomething(Tt) public<T>voiddosomething(Tt) 看了下面的例子就懂了。classFruit publicStringtoString() ... 查看详情
2016710101382016-2017-2《java程序设计》学习心得
... 这周的主要内容是泛型,之前我们已简单的学习了一些关于泛型数组的知识。泛型主 要指在定义类、接口和方法时,通过类型参数指示要处理的类对象。一个泛型类就是具有 一个... 查看详情
java重温学习笔记,关于泛型(代码片段)
Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。一、先看下面的例子... 查看详情
java学习升阶-01-一篇看懂java泛型
泛型,字面含义广泛的类型,可以用于类、接口、方法使得同一套代码可以用于多种数据类型。这样不仅可以复用代码,降低耦合,而且可以提高代码的可读性和安全性。首先看一个例子:Pairkv.javapackagecom.paint.test;publicclassPairkv&... 查看详情
java学习笔记:泛型
泛型是一个很重要的概念。其实个人感觉它就像孙悟空保护唐僧画的一个圈,没画圈之前,什么妖魔鬼怪都可以在里面作祟,画圈之后,限定了只有唐僧才能待在里面。 在java使用泛型之前呢,以A... 查看详情
2016710101292016—2017—2《java程序设计》学习java的泛型程序设计的小结
泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。 泛型变量上界:extends关键字所声明的上界既可以是一个类,也可以是一个接口。 泛型变量下界:通过关键字super来固定泛型参数的类... 查看详情
泛型的作用是什么?——java系列学习笔记
Java语言中,引入泛型实乃为一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。作... 查看详情
《java编程思想》学习笔记——第十五章泛型
在面相对象编程中,多态算是一种泛化机制。 泛型实现了参数化类型的概念。 泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确... 查看详情
java讲课笔记35:初探泛型
文章目录零、本讲学习目标一、泛型的概念二、泛型的好处(一)提高程序类型安全(二)消除强制类型转换三、案例演示泛型使用(一)类使用泛型(二)构造方法使用泛型(三)设置多个泛型(四)使用通配符(五)使用泛... 查看详情
java学习第16天(泛型增强for)
泛型概述 是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。格式: <数据类型> 注意:该数据类型只能是引用类型。好处:避免了强制类型转换,比如上个实验 Strings=(String)... 查看详情
java:effectivejava学习笔记之优先考虑泛型和泛型方法(代码片段)
Java优先考虑泛型和泛型方法1、优先考虑泛型2、优先考虑泛型方法参考1、优先考虑泛型下面我们举个例子,将他作为泛型化的主要备选对象,换句话说,可以适当的强化这个类来利用泛型。publicclassStackprivateObject[]elem... 查看详情
201753302018-2019-2《java程序设计》第八周学习总结
#**教材学习内容总结###本周学习《Java程序设计》第十五章:***泛型:泛型(Generics)的主要目的是可以建立具有类型安全的集合框架,如链表、散列映射等数据结构。泛型类声明:`class名称<泛型列表>`泛型类声明对象:类名... 查看详情
泛型dao
最近正在学习泛型DAO,通过网上查阅资料,汇总并自己整理了一下。提前需要学习的知识java反射、泛型用到的反射如下:Class<T>类是java.lang包下,Class类的实例表示正在运行的Java应用中的类和接口。Type接口是java.lang.reflect包... 查看详情
kotlin学习笔记——接口抽象类泛型扩展集合操作符与java互操作性单例(代码片段)
注:编码工具为IntelliJ目录接口示例定义变量示例变量默认值抽象类示例实现接口泛型泛型类泛型函数泛型实现自定义map变换泛型类联合泛型函数实现泛型函数实现类型约束泛型vararg参数vararg示例泛型vararg类型判断out和in关键... 查看详情
2016710101092016-2017-2《java程序设计》第十周学习心得
本周我们学习了泛型程序设计,这可以让我们编写的代码被很多不同类型得对象重用。一个泛型类就是具有一个或多个类型变量的类。我们可以定义泛型类,也可以定义泛型方法,泛型方法可以在普通类和泛型方法中定义。调用... 查看详情
java重温学习笔记,java5新特性(代码片段)
1.泛型(Generic)泛型提供编译时类型安全检测机制,该机制允许程序员在编译时检测到非法类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。一个泛型的基本应用:importjava.util.*;publicclassMyDemopublicstati... 查看详情
201771010135杨蓉庆《面对对象程序设计(java)》第十周学习总结(代码片段)
1、实验目的与要求(1) 理解泛型概念;(2) 掌握泛型类的定义与使用;(3) 掌握泛型方法的声明与使用;(4) 掌握泛型接口的定义与实现;(5)了解泛型程序设计,理解其用途。一、理论知识泛型类的定义:(1)泛型:... 查看详情