一、前言
二、泛型类
2.1 概述
Java中泛型使用情况大致包括三种:泛型类、泛型接口、泛型方法
本节演示泛型类。
2.2 代码
2.2.1 泛型类一个字母、显式指定泛型实参
package mypackage泛型类;
//泛型类一个字母、显示指定泛型实参 则当前泛型由实参指定
//此时,注意传入的实参必须为引用类型,不能为基本类型,如果是8种基本类型,则传入它们的包装类型
public class Test {
public static void main(String[] args) {
GenericClass genericClass = new GenericClass<Integer>(123);
GenericClass genericClass2 = new GenericClass<String>("abc");
System.out.println(genericClass);
System.out.println(genericClass2);
}
}
class GenericClass<T> {
// 定义泛型类 就是在定义类的时候,类名后面加上<T> 这个字母任意取 可以是T E V或者其他字母
private T key;
public T getKey() {
return key;
}
public void setKey(T key) {
this.key = key;
}
public GenericClass(T key) {
super();
this.key = key;
}
@Override
public String toString() {
return "GenericClass [key=" + key + "]";
}
}
输出1:
GenericClass [key=123]
GenericClass [key=abc]
小结1:泛型类一个字母、显示指定泛型实参 则当前泛型由实参指定
注意:此时传入的实参必须为引用类型,不能为基本类型,如果是8种基本类型,则传入它们的包装类型
2.2.2 泛型类一个字母,不显示指定泛型实参
package mypackage泛型类2;
//泛型类一个字母、不显示指定泛型实参
public class Test {
public static void main(String[] args) {
// 虽然不显式指定T 但是传入参数的时候动态指定了T
GenericClass genericClass = new GenericClass(123); // T为Integer
GenericClass genericClass2 = new GenericClass("abc"); // T为String
System.out.println(genericClass);
System.out.println(genericClass2);
}
}
class GenericClass<T> {
// 定义泛型类 就是在定义类的时候,类名后面加上<T> 这个字母任意取 可以是T E V或者其他字母
private T key;
public T getKey() {
return key;
}
public void setKey(T key) {
this.key = key;
}
public GenericClass(T key) {
super();
this.key = key;
}
@Override
public String toString() {
return "GenericClass [key=" + key + "]";
}
}
输出2:
GenericClass [key=123]
GenericClass [key=abc]
小结2:泛型类一个字母、不显示指定泛型实参,虽然不显式指定T ,但是传入参数的时候动态指定了T
2.2.3 泛型类两个字母、显式指定泛型实参
package mypackage泛型类;
//泛型类两个字母、显示指定泛型实参
public class Test1 {
public static void main(String[] args) {
GenericClass1 genericClass = new GenericClass1<String, Integer>("小A", 95);
System.out.println(genericClass);
}
}
class GenericClass1<K, V> {
// 定义泛型类 就是在定义类的时候,类名后面加上<T> 这个字母任意取 可以是T E V或者其他字母
private K key;
private V 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;
}
@Override
public String toString() {
return "GenericClass [key=" + key + ", value=" + value + "]";
}
public GenericClass1(K key, V value) {
super();
this.key = key;
this.value = value;
}
}
输出3:
GenericClass [key=小A, value=95]
小结3:泛型类两个字母、显示指定泛型实参,直接在一个字母扩展就好,同理多个字母都可以扩展
2.2.4 泛型类两个字母,不显示指定泛型实参
package mypackage泛型类2;
//泛型类两个字母、不显示指定泛型实参
public class Test1 {
public static void main(String[] args) {
// 虽然不显式指定T 但是传入参数的时候动态指定了T
GenericClass1 genericClass = new GenericClass1("小A", 123); // T为Integer
System.out.println(genericClass);
}
}
class GenericClass1<K, V> {
// 定义泛型类 就是在定义类的时候,类名后面加上<T> 这个字母任意取 可以是T E V或者其他字母
private K key;
private V value;
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
p