java泛型中的?如何使用
时间: 2023-05-12 19:04:03 浏览: 103
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
public class MyList<T> {
private T[] array;
public MyList(int size) {
array = (T[]) new Object[size];
}
public T get(int index) {
return array[index];
}
public void set(int index, T value) {
array[index] = value;
}
}
```
在这个示例中,我们声明了一个泛型类 `MyList`,它有一个类型参数 `T`。我们可以在类的定义中使用这个类型参数来声明数组 `array`。注意,我们在构造函数中使用了类型转换 `(T[])`,这是因为 Java 不允许我们直接创建泛型数组。
我们可以通过以下方式使用这个泛型类:
```java
MyList<String> list = new MyList<>(10);
list.set(0, "Hello");
String greeting = list.get(0);
```
在这个示例中,我们创建了一个 `MyList` 类型的对象,并指定 `T` 的类型参数为 `String`。我们可以使用 `set` 方法将字符串 "Hello" 存储在数组的第一个位置,并使用 `get` 方法获取该位置的值。
使用泛型类可以让我们更加灵活地编写可重用的代码,因为我们可以在使用时指定类型参数来适应不同的需求。