java泛型中的?如何使用
时间: 2023-05-12 15:04:03 浏览: 264
Java泛型中的问号(?)被称为通配符,可以用来表示任何类型。它可以用在泛型类、泛型方法和泛型接口中。在泛型类中,可以使用通配符作为类型参数,例如:
public class MyClass<T> {
public void myMethod(List<? extends T> list) {
// ...
}
}
在上面的代码中,通配符表示一个未知的类型,它可以是T的子类,也可以是T本身。在myMethod方法中,我们可以使用list参数中的元素,但不能修改它们。
另外,还有一个通配符是“super”,它表示一个类型的父类,例如:
public void myMethod(List<? super T> list) {
// ...
}
在上面的代码中,通配符表示一个T的父类,我们可以向list参数中添加T类型的元素,但不能读取它们。
总之,通配符可以帮助我们在泛型中使用未知类型,提高代码的灵活性和可重用性。
相关问题
java 泛型<? super R, ? extends V>什么意思
这个问题属于技术问题,我可以回答。这个泛型表示一个类型参数 R 的下限是某个类型,类型参数 V 的上限是某个类型。具体来说,R 可以是 V 的父类或者 V 类型本身,而 V 可以是 R 的子类或者 R 类型本身。这个泛型通常用于表示一个函数或者方法的参数类型或者返回值类型。
Java泛型 - 能否取出Map<String, Integer>的泛型参数?
可以通过Java反射机制获取Map<String, Integer>的泛型参数类型。具体实现可以使用ParameterizedType接口,这个接口表示参数化类型,也就是泛型类型。以下是一个示例代码:
```
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
public class Demo {
public static void main(String[] args) {
Map<String, Integer> map = null;
// 获取map的泛型参数类型
Type type = map.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
// 获取泛型参数列表
Type[] types = ((ParameterizedType) type).getActualTypeArguments();
for (Type t : types) {
System.out.println(t);
}
}
}
}
```
输出结果为:
```
class java.lang.String
class java.lang.Integer
```
可以看到,获取到了Map<String, Integer>的泛型参数类型。其中,types数组中的每一个元素都表示一个泛型参数类型,可以通过getTypeName()方法获取其类型名称。
阅读全文