Java에서는 일반 와일드카드를 사용하면 특정 유형을 지정하지 않고도 일반 유형을 나타낼 수 있습니다. 상한 와일드카드 문자(84ae8caa7f538c9ddbae94fbfaae402c)는 유형 매개변수 T 또는 그 하위 클래스를 나타내므로 하위 클래스 데이터가 목록에서 허용될 수 있습니다. 하위 와일드카드 문자(117c5a0bdb71ea9a9d0c2b99b03abe3e)는 T 또는 해당 수퍼클래스를 나타내며 목록의 수퍼클래스 데이터가 허용되도록 합니다. 와일드카드를 사용하면 제네릭으로 크기 조정 가능한 배열 목록을 구현하여 다양한 유형 및 추가/제거 작업을 처리할 수 있습니다.
Java 함수의 일반 와일드카드: 상한 및 하한
Java에서는 와일드카드를 사용하여 일반 유형을 나타낼 수 있으므로 구체적인 유형을 지정하지 않고도 제네릭을 사용할 수 있습니다. 이 기사에서는 상위 및 하위 와일드카드를 살펴보고 실제 예를 통해 사용법을 보여줍니다.
Capped 와일드카드
Capped 와일드카드(a7d86c54fd68a52918b9332a3353c71f
)는 유형 매개변수 T
또는 해당 하위 클래스를 나타냅니다. 예: d203bb1ae585225d4838a2b7e3d0503e
) 表示类型参数 T
或其任何子类。例如:
public static <T extends Number> double sum(List<T> numbers) { double total = 0; for (T num : numbers) { total += num.doubleValue(); } return total; }
此函数可以接受任何 Number (如 Integer、Double) 或其子类的列表。我们可以安全地将任何满足 Number 约束的列表传递给此函数,如下所示:
List<Integer> ints = List.of(1, 2, 3); double sumIntegers = sum(ints); // 编译通过
下限通配符
下限通配符 (117c5a0bdb71ea9a9d0c2b99b03abe3e
) 表示类型参数 T
或其任何超类。例如:
public static <T super Number> void process(List<T> entities) { for (T entity : entities) { System.out.println(entity.getClass().getName()); } }
此函数可以接受任何 Number 的超类 (如 Object、Serializable) 的列表。我们可以安全地将任何满足 Number 超类约束的列表传递给此函数,如下所示:
List<Object> objects = List.of("Hello", 123); process(objects); // 编译通过
实战案例
考虑一个可调整大小的数组列表,我们可以使用泛型通配符来实现它:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ResizableArrayList<E> { private List<E> list; public ResizableArrayList() { this(new ArrayList<>()); } public ResizableArrayList(List<? super E> initialList) { list = new ArrayList<>(initialList); } public void addAll(List<? extends E> elements) { list.addAll(elements); } public void removeAll(List<? super E> elements) { list.removeAll(elements); } public List<E> getList() { return list; } public static void main(String[] args) { ResizableArrayList<Integer> numbers = new ResizableArrayList<>( Arrays.asList(1, 2, 3) ); numbers.addAll(Arrays.asList(4, 5, 6)); numbers.removeAll(Arrays.asList(2, 3)); System.out.println(numbers.getList()); // [1, 4, 5, 6] } }
这个可调整大小的数组列表可以处理任何类型 E
rrreee
117c5a0bdb71ea9a9d0c2b99b03abe3e
)는 유형 매개변수를 나타냅니다. T 또는 해당 슈퍼클래스. 예: 🎜rrreee🎜이 함수는 모든 Number 슈퍼클래스(예: Object, Serialize) 목록을 허용할 수 있습니다. 다음과 같이 Number 슈퍼클래스 제약 조건을 충족하는 모든 목록을 이 함수에 안전하게 전달할 수 있습니다. 🎜rrreee🎜🎜 실제 예 🎜🎜🎜 크기 조정 가능한 배열 목록을 고려하면 일반 와일드카드를 사용하여 이를 달성할 수 있습니다. 🎜rrreee🎜이 크기 조정 가능한 배열 목록은 다음과 같이 할 수 있습니다. 모든 유형의E
를 처리하여 목록에 다양한 개체를 추가하거나 제거할 수 있습니다. 🎜위 내용은 Java 함수의 일반 와일드카드: 상한 및 하한의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!