gpt4 book ai didi

java - 为什么API中有java.util的Set?

转载 作者:行者123 更新时间:2023-12-01 06:35:19 25 4
gpt4 key购买 nike

java.lang.util中的接口(interface)Set具有完全相同的结构作为同一包的集合

在继承层次结构中,AbstractSet是子到 SetAbstractCollection,两者其中属于集合

Set 的另一个直接后代是 SortedSetSortedSet 仅扩展Set

我想知道的是,java.lang.util中的Set有什么好处——为什么它在那里?

如果我没有遗漏任何东西,那么它就没有添加任何东西API 的当前结构或层次结构。如果 AbstractSet 没有,一切都会相同实现 Set 但只是扩展了 AbstractCollectionSortedSet直接扩展集合

我唯一能想到的是Set是为了文档目的。

不应该用于进一步构建/重新构建层次结构——这意味着后代的结构修改并没有意义。

如果我在这里遗漏了什么,我正在寻找验证或反驳。

//==============================================

编辑:问题是:“为什么在那里设置”——它在 API 结构中添加了什么?”

很明显,集合在数学上是如何特殊的。

最佳答案

SetCollection 中的方法具有相同的签名和返回类型,但它们具有不同的行为契约...源自事实上,一个集合不能多次包含“相同”元素。这就是为什么它们是不同的界面。

这不仅仅是文档。由于 Java 不执行“鸭子类型”,因此 CollectionSet 之间的区别在编译时和运行时类型检查中都可见。

这一区别很有用。如果只有Collection,那么您将无法编写需要一个没有重复项作为参数的集合的方法。

<小时/>

你写:

Set is a copy/paste of Collection apart from the comments.

我知道。评论是行为契约。他们很挑剔。没有其他方法可以指定 Java 1, 2 中某些内容的 行为

引用:

<小时/>

1 - 在一种或两种语言中,您可以在语言本身中指定“契约”的行为方面。埃菲尔铁塔是一个经典的例子……它催生了“契约设计”范式。

2 - 事实上,JML System 向 Java 添加了正式的前置条件、后置条件和不变量,并使用自动定理证明器检查它们。问题是很难将其与 Java 语言的类型系统/静态类型检查器完全集成。 (当定理证明者说“我不知道”时,如何静态类型检查某些内容......因为它不够智能,无法证明/反驳代码中的 JML 断言?)

关于java - 为什么API中有java.util的Set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18049757/

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