Java泛型是Java 5之后引入的新特性,可以让我们编写更加类型安全的代码。在泛型中,T、E、K、V、N 和 ? 是常见的符号。它们代表的是不同的类型参数。
T
T 是 Java 泛型中最常见的类型,表示任意类型。在定义类或方法时,我们可以使用 T 代替所有可能的类型。例如,下面是一个定义了一个泛型类的例子:
public class Box<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
在类名后面的尖括号里,我们使用 T 定义了一个类型参数。在类中的方法中可以使用 T 代替任意类型,从而实现了一个通用的操作。
E
E 也是一种泛型类型参数,和 T 类似,它表示任意类型。通常被用作集合的元素类型的占位符。例如,使用 E 定义一个简单的列表:
public class MyList<E> {
private E[] list;
public MyList(int size) {
list = (E[])new Object[size];
}
public E get(int index) {
return list[index];
}
public void set(int index, E value) {
list[index] = value;
}
}
在上面的例子中,我们使用 E 定义了一个类型参数。在类中的各种方法中使用 E 代替了任意类型,实现了一个通用的操作。
K和V
K 和 V 分别表示 Key 和 Value,通常用于表示 Map 中的键/值类型。例如,定义一个简单的 Map 实现:
public class MyMap<K, V> {
private List<K> keys = new ArrayList<>();
private List<V> values = new ArrayList<>();
public void put(K key, V value) {
keys.add(key);
values.add(value);
}
public V get(K key) {
int index = keys.indexOf(key);
if (index != -1) {
return values.get(index);
}
return null;
}
}
在上面的例子中,我们使用 K 和 V 定义了两个类型参数,用于表示键和值的类型。在 put 和 get 方法中,可以使用 K 和 V 代替任意类型。
N
N 是一个数字类型参数,在 Java 中没有内置数字类型参数,如果需要支持数字类型参数,就需要使用 N。例如,为一个数组排序:
public class Sorter<N extends Number> {
private N[] array;
public Sorter(N[] array) {
this.array = array;
}
public void sort() {
Arrays.sort(array);
}
}
在上面的例子中,我们使用 N 定义了数字类型参数。在 sort 方法中,可以使用 N 代替任意数字类型,例如 Integer、Double、Float 等。
?
? 表示未知类型参数,通常用于表示不关心具体类型的情况。例如,打印任意类型的数组:
public class Printer {
public static void printArray(Object[] array) {
for (Object element : array) {
System.out.println(element);
}
}
}
在上面的例子中,我们使用 Object 类型作为数组的元素类型。在 printArray 方法中,可以使用 ? 代替任意类型,例如 Integer、Double、String 等。使用 ? 表示不关心具体类型,这让代码变得更加灵活。
Object
Object 是一个基本类型,表示所有 Java 对象类型的超类。和泛型 T、E、K、V、N 和 ? 不同,它不能代表任何类型参数。在需要处理具体类型的情况下,我们通常使用 Object。
下面是使用 Object 的例子:
public class Box {
private Object object;
public void set(Object object) {
this.object = object;
}
public Object get() {
return object;
}
}
在上面的例子中,我们使用 Object 作为 Box 类的成员变量类型。在 set 方法中,可以设置任意类型的值;在 get 方法中,可以返回 Object 类型的值。使用 Object 让代码能够处理任意类型的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java泛型T,E,K,V,N,?与Object区别和含义 - Python技术站