首页 > 解决方案 > LinkedHashSet 在低级数据存储获取 Java 中返回为 HashSet

问题描述

参数声明如下,

@Persistent private Set<ScopeType> scope = new LinkedHashSet<ScopeType>();

使用高级数据存储提取进行提取时,它会使用LinkedHashSet进行响应,但在低级提取时,响应是HashSet,这是预期的吗?

标签: javajdolinkedhashset

解决方案


这看起来很合理。的类型scopeSet,不是,LinkedHashSet也不是HashSet。这些是实现类型。的任何用户scope只保证声明的类型得到满足,而不是特定的实现正在使用中。

如果LinkedHashSet必须保持 的保序特性,则scope必须声明为LinkedHashSet

使用具体类型作为声明类型会破坏大多数样式规则,但在这种情况下是不可避免的。没有类似的界面Set可供使用。这是java类型限制的结果。


推荐阅读