【问题标题】:'Set = new HashSet' or 'HashSet = new Hashset'? [duplicate]'Set = new HashSet' 还是'HashSet = new Hashset'? [复制]
【发布时间】:2012-09-24 05:11:54
【问题描述】:

可能重复:
List versus ArrayList variable type?

我正在我的程序中初始化一个HashSet:

Set<String> namesFilter = new HashSet<String>();

如果我这样初始化,这在功能上有什么不同吗?

HashSet<String> namesFilter = new HashSet<String>();

我已经阅读了this 关于集合接口的内容,并且我了解接口(嗯,除了它们在这里的使用)。我读过来自 Effective Java 的这个 excerpt,我也读过这个 SO question,但我觉得一点也不聪明。

Java 中有没有最佳实践,如果有,为什么?我的直觉是,在我的第一个示例中,它使转换为不同类型的 Set 变得更容易。但话又说回来,你只会转换为一个集合,你可以通过重新构造它来转换它。

【问题讨论】:

  • 我更喜欢使用界面。如果您已经知道所有论点,那么问题是什么?有什么问题?
  • @duffymo 我听说过这些论点,但它们并没有帮助我理解。然而,这里的答案和提议的欺骗中的答案是有道理的。

标签: java generics collections constructor initialization


【解决方案1】:

我认为在具体类型上使用接口是更好的做法,即

Set<String> strings = new HashSet<String>();

通过这样做,您承诺只使用Set 接口提供的功能。如果您决定想要不同的性能特征(例如,如果您想改用 TreeSet),则可以更轻松地更换您日后使用的那种集合,而不必担心破坏您的代码。

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多