一、Java泛型是什么?
Java泛型是一种非常重要的特性,它可以使我们在编写Java代码时更为灵活,同时也可以提高代码的可读性和可维护性。在本文中,我们将介绍如何使用Java泛型,包括如何定义泛型类、泛型方法、泛型接口以及如何使用通配符和类型参数等。
二、泛型使用
1.定义泛型类
定义泛型类的方式很简单,只需要在类名后面加上一对尖括号,然后指定泛型类型即可。
public class Demo6_generic {
public static void main(String[] args){
//加了泛型只能添加对应的类型,安全
Tool<String> t = new Tool<>();
t.set("heo");
System.out.println(t.get());
}
}
class Tool<T>{
private T q;
public void set(T q){
this.q = q;
}
public T get()
{
return q;
}
}
2.泛型方法
定义泛型方法的方式与定义泛型类类似,只需要在方法名前面加上一对尖括号,然后指定泛型类型即可。
class Tool<T>{
private T q;
public void set(T q){
this.q = q;
}
public T get()
{
return q;
}
//泛型方法,返回值类型是K
public static <K> K demo1(K value){
K val = value;
return val;
}
}
3.泛型接口
泛型接口和泛型类的定义很相似
public interface Inter<T> {
public void show(T t);
//泛型接口方法
public <K> K display(K value);
}
4.通配符上界
<? extends T>,在类型参数中使用 extends 表示这个泛型中的参数必须是 E 或者 E 的子类
public class Demo7_generic {
public static void main(String[] args){
//高级泛型,?代表任意类型,? extends E:父类是E ,?是子类
List<Father> fathers = new ArrayList<>();
List<Son> sons = new ArrayList<>();
demo3.test(fathers);
demo3.test(sons);
}
}
class demo3{
public static <T> void test(List<? extends Father> list){
System.out.println(list);
}
}
class Father{ }
class Son extends Father{}
5.通配符下界
public class Demo7_generic {
public static void main(String[] args){
//高级泛型,?代表任意类型,? extends E:父类是E ,?是子类
List<Father> fathers = new ArrayList<>();
List<Son> sons = new ArrayList<>();
demo3.test(fathers);
demo3.test(sons);
}
}
class demo3{
public static <T> void test(List<? super Father> list){
System.out.println(list);
}
}
class Father{ }
class Son extends Father{}
6.无界通配符
<?>,即类型参数可以是任何类型无边界的通配符的主要作用就是让泛型能够接受未知类型的数据
public static void main(String[] args) {
List<Integer> arrays = Arrays.asList(1, 1, 1);
List<String> arrayString = Arrays.asList("1", "1", "1");
printList(arrays);
printList(arrayString);
}
public static void printList(List<?> list) {
for (Object elem : list) {
System.out.print(elem + "");
}
System.out.println();
}