关键词:
泛型的生命周期
- Java中的泛型,只在
编译阶段有效
,在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换方法。也就是说,泛型信息不回进入到运行时阶段
。
泛型类
class A<T>
private T key;
public T getKey()
return key;
public void setKey(T key)
this.key = key;
泛型类使用测试:
//在new A对象的时候,指定泛型的类型为String
A<String> a1=new A<>();//这边有自动类型推导
//对象使用setKey(T key)方法中的key形参就是String类型
a1.setKey("大忽悠");
String key = a1.getKey();
A<Integer> a2=new A<>();
a2.setKey(1);
Integer key1 = a2.getKey();
//在创建对象时,不指定泛型,那么相当于指定了一个Object类型
A a3=new A();
a3.setKey("大忽悠");
Object key2 = a3.getKey();在这里插入代码片
同样的类,但是在new对象时泛型指定不同数据类型,这些对象不能互相赋值
泛型接口
public interface Dhy<T>
T test(T t);
类实现该接口,但是不写泛型,默认是Object类型,同上
public class DhyImpi implements Dhy
@Override
public Object test(Object o)
return null;
类实现接口,未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需要将泛型的声明也一起加到类中
public class DhyImpi<T> implements Dhy<T>
@Override
public T test(T t)
return null;
如果不声明泛型,如:
public class DhyImpi implements Dhy<T>
编译器会报错: "Unknown class"
如果实现接口时,指定了接口的泛型的具体数据类型,这个类实现接口所有方法的位置都要指定泛型替换实际的具体数据类型
public class DhyImpi implements Dhy<Integer>
@Override
public Integer test(Integer integer)
return null;
泛型方法
public class Xpy<E>
//静态变量的类型不能是泛型
//static private E e;
private E e;
//静态方法的泛型
public static <T> void test3(T t)
//在静态方法中,不能使用类定义的泛型,如果要使用泛型,只能使用静态方法自己定义的泛型
//System.out.println(e);
System.out.println(t);
//在修饰符后面加上泛型,那么当前方法内部就可以使用该泛型
public <T> void show(T t)
//在类上定义的泛型,可以在普通的方法中进行使用
System.out.println(e);
T s=t;
public <T> T test(T t)
return t;
//可变参数的泛型方法
public <T> void test2(T...str)
for (T t : str)
System.out.println(t);
关于泛型方法的总结
- 泛型方法,在调用之前没有固定的数据类型
- 在调用时,传入的参数是什么类型,就会把泛型改成什么类型
- 泛型方法会在调用时确定泛型具体的数据类型
- 静态变量类型不能是泛型
- 静态方法只能使用当前静态方法定义的泛型
泛型通配符
有限制的通配符
泛型-总复习(代码片段)
泛型的理解1.泛型的概念所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类型声明变量、创建对... 查看详情
android--面试复习指南之java基础(代码片段)
...础中考察频率比较高的是Object、String、面向对象、集合、泛型和反射。一、抽象类与接口的区别?抽象类可以提供成员方法的实现细节,而接口中只能存在public抽象方法;抽象类中的成员变量可以是各种类型的,... 查看详情
换个姿势,十分钟拿下java/kotlin泛型(代码片段)
...tlin,跟着朱涛的《Kotlin编程第一课》查缺补漏。看到泛型这一章时,想起之前面一家小公司时的面试题:说下你对泛型协变和逆变的理解?读者可以试试在不查资料的情况下能否答得上来?反正我当时是没想... 查看详情
java——泛型(代码片段)
文章目录Java中泛型的概述Java中泛型的语法规则泛型集合泛型方法泛型方法示例(代码演示)小结泛型类泛型类示例(代码演示)小结泛型接口泛型接口示例(代码演示)高级泛型总结Java中泛型的概述泛型... 查看详情
java泛型与非泛型java(代码片段)
java泛型(代码片段)
反射和泛型的复习
反射在框架的设计中很多都用到了反射,比如spring中我们在applicationContext.xml中配置类,通过反射+工厂模式得到类的实例,就可以操作类了——操作一个类可以分为操作属性,构造方法,普通方法。反射的原理我们编写的Ja... 查看详情
java泛型介绍(代码片段)
java_泛型笔记(代码片段)
文章目录Java_泛型简介Java_泛型的概念Java_为什么存在泛型Java_自定义泛型结构Java_泛型的声明Java_泛型的实例化Java_泛型类Java_泛型方法Java_泛型在继承上的体现Java_通配符的使用Java_泛型简介集合容器类在设计阶段/声明阶段不能确... 查看详情
java泛型(代码片段)
文章目录前言一、泛型1.泛型的好处2.泛型的本质3.泛型类4.泛型接口5.泛型方法5.限定类型变量6.泛型的约束和局限性7.通配符类型总结前言提示:以下是本篇文章正文内容,下面案例可供参考一、泛型1.泛型的好处1.适用于... 查看详情
java泛型(代码片段)
Java泛型技术产生的原因:packagecn.mldn.utli;classPointprivateObjectx;privateObjecty;publicvoidsetX(Objectx)this.x=x;publicvoidsetY(Objecty)this.y=y;publicObjectgetX()returnx;publicObjectgetY()returny; 查看详情
java泛型(代码片段)
泛型01:packageCharTest;importjava.util.ArrayList;@SuppressWarnings("all")publicclassGeneric02publicstaticvoidmain(String[]args)ArrayList<Dog>arrayList=newArrayList<Dog>();a 查看详情
java泛型是什么?一文带你吃透泛型(代码片段)
文章目录1.Java泛型2.泛型类3.泛型接口4.泛型方法5.泛型集合Java编程基础教程系列1.Java泛型Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递。其主要的形式有泛型类,泛型接口和泛型方法。泛型概... 查看详情
java-泛型-3(代码片段)
泛型类publicclassTest<TextendsNumber>privateTkey;publicTest(Tkey)this.key=key;publicTgetKey()returnkey;publicvoidsetKey(Tkey)this.key=key;泛型接口publicinterfaceGenerator<T>publi 查看详情
java-----泛型(代码片段)
泛型1.泛型前言2.泛型接口3.泛型方法1.泛型前言泛型的本质是参数化类型,参数化类型:所操作的数据类型被指定为一个参数,将类型由原来的具体的类型参数化//泛型中:T\\E\\K\\Vimportjava.util.Arrays;//可存在多个泛... 查看详情
java-泛型-3(代码片段)
泛型类publicclassTest<TextendsNumber>privateTkey;publicTest(Tkey)this.key=key;publicTgetKey()returnkey;publicvoidsetKey(Tkey)this.key=key;泛型接口publicinterfaceGenerator<T>publicTfun();泛 查看详情
java基础总结三(泛型异常)(代码片段)
文章目录Java基础总结三(泛型、异常)泛型泛型的创建泛型类泛型接口泛型方法类型擦除泛型的协变与逆变异常异常体系异常处理Java基础总结三(泛型、异常)泛型泛型的创建泛型类我们最常用泛型的地方就是... 查看详情
java泛型(代码片段)
E-Element(在集合中使用,因为集合中存放的是元素)示例:publicclass泛型Epublicstaticvoidmain(String[]args)Integer[]stringArray=1,2,3,4,5,6,7;printArray(stringArray);/****/publicstatic<E>voidprintArray(E[]inputArray)/ 查看详情