“有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
”https://blog.zysicyj.top
首发博客地址[1]
面试题手册[2]
系列文章地址[3]
泛型的使用方式有以下几种:
- 泛型类:定义一个类时,可以在类名后面加上尖括号<>,并在其中指定类型参数。这样,在类中就可以使用这个类型参数来声明属性、方法等。例如:
public class MyGenericClass<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } }
在上述代码中,MyGenericClass
是一个泛型类,T
是类型参数,可以在类中的属性和方法中使用。
- 泛型接口:与泛型类类似,可以在接口名后面加上尖括号<>,并在其中指定类型参数。然后在实现该接口时,需要指定具体的类型。例如:
public interface MyGenericInterface<T> { void doSomething(T value); } public class MyImplementation implements MyGenericInterface<String> { @Override public void doSomething(String value) { System.out.println("Doing something with " + value); } }
在上述代码中,MyGenericInterface
是一个泛型接口,T
是类型参数。MyImplementation
类实现了 MyGenericInterface
接口,并指定了类型参数为 String
。
- 泛型方法:在普通类或者非泛型类中,可以定义一个泛型方法,即在方法返回值前面加上尖括号<>,并在其中指定类型参数。例如:
public class MyGenericMethod { public <T> void printValue(T value) { System.out.println("Value: " + value); } }
在上述代码中,printValue
是一个泛型方法,<T>
是类型参数,在方法中可以使用这个类型参数。
- 通配符:有时候我们可能不关心具体的类型参数,只需要保证它是某种类型或者其子类即可。这时可以使用通配符来表示未知类型。通配符有两种形式:
? extends T
表示类型参数是T
或者T
的子类;? super T
表示类型参数是T
或者T
的父类。例如:
public void processList(List<? extends Number> list) { for (Number number : list) { // do something with number } } public void addToList(List<? super Integer> list) { list.add(1); }
在上述代码中,processList
方法接收一个列表,其中元素的类型必须是 Number
或者 Number
的子类。addToList
方法接收一个列表,其中元素的类型必须是 Integer
或者 Integer
的父类。
以上就是泛型的几种使用方式。通过使用泛型,可以增加代码的灵活性和安全性,使得代码更加通用和易于维护。
参考资料
[1]
首发博客地址:https://blog.zysicyj.top/
[2]面试题手册:https://store.amazingmemo.com/chapterDetail/1685324709017001
[3]系列文章地址:https://blog.zysicyj.top/categories/技术文章/后端技术/系列文章/面试题精讲/
本文由 mdnice 多平台发布