赞
踩
}
}
}
输出结果:
class java.util.ArrayList
class java.util.ArrayList
类型相同
通过上面的例子可以证明,在编译之后程序会采取去泛型化的措施。也就是说Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
对此总结成一句话:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。
四、泛型的使用
=======
1、泛型类
public class GenericDemo4 {
public static void main(String[] args) {
Tool tool = new Tool<>();
tool.setType(new Student());
Student student = tool.getType();
}
}
public class Tool {
private T t;
public T getType() {
return t;
}
public void setType(T t) {
this.t = t;
}
}
public class Student extends Person {
public Student() {
}
public Student(String name, int age) {
super(name, age);
}
}
public class Person implements Comparable {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person person) {
int temp = this.age - person.age;
return temp == 0 ? this.name.compareTo(person.name) : temp;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Person{” +
“name='” + name + ‘’’ +
“, age=” + age +
‘}’;
}
}
2、泛型方法
public class Tool {
private T t;
public T getType() {
return t;
}
public void setType(T t) {
this.t = t;
}
/**
将泛型定义在方法上
@param str
@param
*/
public void show(W str) {
System.out.println("show: " + str);
}
public void print(T str) {
System.out.println("print: " + str);
}
/**
当方法静态时,不能访问类上定义的泛型。如果静态方法使用泛型,只能将泛型定义在方法上
@param str
@param
*/
public static void method(Y str){
System.out.println("method: " + str);
}
}
public class GenericDemo5 {
public static void main(String[] args) {
Tool tool = new Tool<>();
tool.show(4);
tool.print(“haha”);
Tool.method(“hehehe”);
Tool.method(88);
}
}
3、泛型接口
public class GenericDemo6 {
public static void main(String[] args) {
InterImpl inter = new InterImpl();
inter.show(“abc”);
InterImpl2 inter2 = new InterImpl2();
inter2.show(“abc222”);
}
}
interface Inter {
void show(T t);
}
class InterImpl implements Inter {
@Override
public void show(String s) {
System.out.println(“show:” + s);
}
}
class InterImpl2 implements Inter {
@Override
public void show(T t) {
System.out.println(“show:” + t);
}
}
4、通配符的体现
public class GenericDemo7 {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList<>();
arrayList.add(“abc”);
arrayList.add(“haha”);
ArrayList arrayList2 = new ArrayList<>();
arrayList2.add(111);
arrayList2.add(222);
printCollection(arrayList);
printCollection(arrayList2);
}
/**
泛型的通配符:?
@param collection
*/
private static void printCollection(Collection<?> collection) {
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
ActiveMQ消息中间件面试专题解析拓展:
Spring面试答案解析拓展
高并发多线程面试解析与拓展
JVM面试专题解析与拓展!
面试专题
高并发多线程面试解析与拓展
[外链图片转存中…(img-WK51HaYM-1711054896080)]
JVM面试专题解析与拓展!
[外链图片转存中…(img-h2y8KG6t-1711054896080)]
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。