网站首页 > java教程 正文
【死记硬背】
泛型提供了编译期强类型检查、无需进行显式类型转换,它的本质是参数化类型,通常用于输入参数、存储类型不确定的场景。比如我们要写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用 Java 泛型。泛型的具体实现可以定义泛型方法、泛型类、泛型接口等。
关于泛型的知识,还有另外一个概念->类型擦除:英文是type erasure,Java 中的泛型是在编译器这个层次实现的,在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉,这个过程就是类型擦除。
【答案解析】
泛型方法
定义泛型方法时,必须在返回值前边加一个<T>,来声明这是一个泛型方法,持有一个泛型T,然后才可以用泛型T作为方法的返回值。泛型方法是指在调用的时候可以接收不同类型的参数,根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
<? extends T>表示该通配符所代表的类型是 T 类型的子类。<? super T>表示该通配符所代表的类型是 T 类型的父类。
泛型类
在编译器层面上,我们无法知道K和V具体是什么类型,但是在运行时就会根据类型来构造和分配内存。
public class Container<K,V> {
private K key;
private V value;
public Container(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
public static void main(String[] args) {
Container<String,String> container = new Container<>("name","面试题解析");
System.out.println(container.getKey()+":"+container.getValue());
}
}
// 输出结果
name:面试题解析
泛型接口
// 泛型接口
public interface Generator<T> {
T name();
}
// 泛型接口实现
public class GeneratorImpl implements Generator<String> {
@Override
public String name() {
return "面试题解析";
}
}
总结
泛型可以让我们的代码更加具有通用性,不会导致定义了一种类型之后其他的类型都无法使用该代码。
【温馨提示】
点赞+收藏文章,关注我并私信回复【面试题解析】,即可100%免费领取楼主的所有面试题资料!
- 上一篇: Java核心知识 基础五 JAVA 泛型
- 下一篇: 你真的了解java中的泛型吗?
猜你喜欢
- 2024-11-19 Java基础:泛型,设计的灵活与局限
- 2024-11-19 Java必学:深入了解泛型
- 2024-11-19 你真的了解java中的泛型吗?
- 2024-11-19 Java核心知识 基础五 JAVA 泛型
- 2024-11-19 Java泛型详解
- 2024-11-19 Java中的泛型是什么?
- 2024-11-19 Java/Scala 泛型快速入门教程
- 2024-11-19 Java高级特性—泛型看这一篇就够了
- 2024-11-19 讲讲Java的泛型
- 2024-11-19 用了这么多年的 Java 泛型,你对它到底有多了解?
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)