Java核心知识泛型
Posted 烟锁迷城
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java核心知识泛型相关的知识,希望对你有一定的参考价值。
1、基本概念
1.1、泛型本质
泛型的本质是参数化类型,它能够指定参数数据类型,统一类型防止出现参数类型转换问题。
1.2、泛型擦除
泛型只在编译阶段有效,编译之后JVM会采取去泛型化的措施,在运行阶段泛型失效。
2、详细介绍
2.1、无边界通配符
<?>
是无边界通配符,可以适配任何类型。
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
loop(list);
}
private static void loop(List<?> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
2.2、上边界通配符
<? extends >
是上边界通配符,它限定了只有某类或其子类才可以作为通用类型。
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
loop(list);
}
private static void loop(List<? extends Integer> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
2.3、下边界通配符
<? super>
是上边界通配符,它限定了只有某类或其父类才可以作为通用类型。
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
loop(list);
}
private static void loop(List<? super Integer> list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
3、具体使用
3.1、声明
泛型必须先声明,再使用。它的声明方式为<>
,可以使用单个大写字母来表示,如<K>,<V>,<E>,<T>
等
3.2、场景
3.2.1、泛型类
增加代码灵活度,
public class Demo<T> {
private T t;
public Demo(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
3.2.2、泛型方法
在静态方法中,无法使用类中定义的泛型,但可以使用方法定义的泛型。
public class Demo<K, V> {
/**
* 使用类定义泛型的普通方法
*/
public K setT(K k, V v) {
return (K) null;
}
/**
* 使用方法定义泛型的普通方法
*/
public <T> T method2(T t, V v) {
return (T) null;
}
/**
* 使用方法定义泛型的静态方法
*/
public static <B> B method3(B b) {
return (B) null;
}
}
3.2.3、泛型接口
public interface IDemo<T> {
T method(T a, T b);
}
public class Demo implements IDemo<Integer> {
@Override
public Integer method(Integer a, Integer b) {
return null;
}
}
以上是关于Java核心知识泛型的主要内容,如果未能解决你的问题,请参考以下文章