gpt4 book ai didi

java - 什么接口(interface)表示具有插入顺序迭代的 LinkedHashSet

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:03 25 4
gpt4 key购买 nike

由于以下代码行,我被 Sonar 拉了起来:

public void setFileNames(LinkedHashSet<String> fileNames) {

错误信息:

Avoid using implementation types like 'LinkedHashSet'; use the interface instead

当我想表示一个保持其插入顺序的未排序 Set 时,有什么解决方法?我是否只使用 Set 并明确表示将保留迭代顺序?

存储的数据将使用 JaxB 进行序列化,反序列化后迭代顺序是必不可少的。

(我知道并完全理解this)

最佳答案

没有这样的 interface因为要求输入这种行为是没有意义的。代码创建 Set在创建 Set 时可能有关于订单的意图并选择适当的实现.

但是问题是Set怎么可能呢?具有插入顺序、字母顺序或任意顺序,例如基于散列,顺序对 setFileNames(Set<String> fileNames) 这样的方法有所不同?

声明参数类型为Set保证不会有对行为有影响的重复项,但插入顺序是关于 Set 历史的无意义信息(除非 caller 使其有意义) .

如果你坚持要有一个方法签名setFileNames(LinkedHashSet<String> fileNames) , 我仍然可以传入 Set带有无意义的命令,例如呼唤
setFileNames(new LinkedHashSet<String>(hashSet))或具有字典顺序的集合,例如setFileNames(new LinkedHashSet<String>(treeSet)) .你的签名只会让事情变得更复杂。

关于java - 什么接口(interface)表示具有插入顺序迭代的 LinkedHashSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28367775/

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