gpt4 book ai didi

java - 类型参数 vs 无限通配符

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:45 25 4
gpt4 key购买 nike

来自 Effective Java 第 5 章(泛型):

// Two possible declarations for the swap method
public static <E> void swap(List<E> list, int i, int j);
public static void swap(List<?> list, int i, int j);

Which of these two declarations is preferable, and why? In a public API, the second is better because it’s simpler. You pass in a list — any list — and the method swaps the indexed elements. There is no type parameter to worry about. As a rule, if a type parameter appears only once in a method declaration, replace it with a wildcard.

我不明白,为什么第二个选项对我的 API 客户端来说更简单?我可以将相同的参数传递给第一个和第二个方法。第二个也需要辅助方法来捕获通配符。有人可以解释为什么推荐第二个吗?谢谢!

最佳答案

Java Generics FAQ 是回答此类问题的重要来源,“通配符与泛型”在 Which one is better: a generic method with type parameters or a non-generic method with wildcards? 中进行了详细讨论。以及随后的案例研究。

Angelika Langer 得出结论:

Conclusion: In all these examples it is mostly a matter of taste and style whether you prefer the generic or the wildcard version. There is usually trade-off between ease of implementation (the generic version is often easier to implement) and complexity of signature (the wildcard version has fewer type parameters or none at all).

更简单的方法签名 -> 更容易理解(即使两者以相同的方式使用) -> 在公共(public) API 中很好(权衡:更复杂的实现)

但整个事情是一个轻量级的问题,根据我的经验,整个 API 的一致性比您使用哪种风格更重要。

关于java - 类型参数 vs 无限通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com