gpt4 book ai didi

java - 封装:java中为什么叫keySet

转载 作者:行者123 更新时间:2023-12-01 06:42:31 26 4
gpt4 key购买 nike

在java中,要获取映射中的所有键,我们可以使用方法keySet。但我想知道为什么方法名称不只是 keys ?名称 Set 是否会泄露有关实现的详细信息?

据我了解,Java 是静态类型语言,名称中包含类型根本没有意义。无论如何,调用代码必须具有正确的接口(interface)类型。如果我们假设这个策略是正确的,那么每个方法都必须有类型前缀,这是没有任何意义的。我认为 @JBNizet 在他的评论中正确地阐述了选择背后的原因。

最佳答案

isn't the name Set leaks details about the implementation?

1) Set是一个接口(interface)。
例如,如果该方法被命名为 keyHashSet() ,这不是一个好主意如HashSetSet 的实现.

但是keySet()很好,因为将定义特定协定的接口(interface)作为返回类型并在方法名称中使用传达此特定协定的名称是通过接口(interface)进行编程并能够返回 Set 的任何实现的有效方法。以干净的方式。

2) 除了选择Map接口(interface) keys()方法名称而不是 keySet()也不可能。
正如 @JB Nizet 在其评论中建议的那样, keys()方法已在 JDK 集合类中定义:Enumeration<K> keys() .
它在 Dictionary 中声明类HashTable继承自:

public class Hashtable<K,V>  extends Dictionary<K,V>...{

但是这个方法:Enumeration<K> keys();不返回 Set .
所以HashTable这既是 Dictionary和一个 Map :

public class Hashtable<K,V>  extends Dictionary<K,V>  implements Map<K,V>,

必须实现一种方法来返回 Enumeration 中的键形式,还有另一种以 Set 形式返回它们形式。
因此需要一个独特的命名来区分它们

您可能还注意到Set<Map.Entry<K, V>> entrySet()也在 Map 中定义接口(interface)遵循相同的命名逻辑,而HashTable没有其他层次结构定义了 entries()方法。
可能是为了保持一致。

关于java - 封装:java中为什么叫keySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46511216/

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