【问题标题】:Casting an ImmutableList to List将 ImmutableList 转换为 List
【发布时间】:2014-10-27 13:57:26
【问题描述】:

虽然我的研究一直在进行,但看起来 Google Guava 的 ImmutableList 实现了 List。所以我可以将其转换为List,对吗?我知道如果使用List的其中一种修改方法会抛出错误,但这一切都会出错吗?

public List<Integer> getList() { 
    return ImmutableList.of(1,2,3);
}

【问题讨论】:

  • 一个List,但不清楚你为什么需要将它转换成List
  • 但这就是所有可能出错的地方 - 你还想出错什么?... >
  • 你写的代码已经按预期工作了
  • 我喜欢将它转换或作为 List 传递,因为我维护的应用程序在任何地方都使用 List,所以我想保持这种灵活性而不是彻底检查和替换每个 List 类型ImmutableList 类型。
  • @ThomasN。 - 那你就可以通过了。 因为一个ImmutableList也是一个List

标签: java list guava


【解决方案1】:

如果它实现了 List,则无需将其强制转换为 List。您可以将其分配给 List 变量或将其传递给需要 List 而不进行强制转换的方法。

而且,是的,调用任何修改 List 的方法都会引发异常,但无论您是否将其转换为 List,它都会发生。

【讨论】:

    【解决方案2】:

    我看到一个更大的问题,我认为你不明白。您不能将对象 down 转换为您的对象 (ImmutableList) 实现的对象类型。 List&lt;E&gt;ImmutableList 的接口。您可以将其转换为 List&lt;E&gt; 类型,但您会丢失 ImmutableList 拥有/提供的所有 List 没有的东西。

    【讨论】:

    • 没有评论解释我的回答有什么问题?它没有明确回答 OP 的问题,但确实指出了他的逻辑。
    • 这对我来说似乎完全不正确。您可以将对象转换为它实现的类型 (List&lt;String&gt; bar = (List&lt;String&gt;) ImmutableList.of("bar");)。事实上,演员阵容通常是多余的。而且没有“List 类型的新实例”之类的东西,因为List 是一个接口。
    • 我没说你不能施放它。我说你不能倒下。 OP 听起来好像实现的接口在层次结构中较低,而它在上面。也许这只是他措辞的语义,我注意到没有人将&lt;E&gt; 添加到任何东西中,使ListList&lt;E&gt; 看起来是一样的。 List&lt;String&gt; bar = (List&lt;String&gt;) ImmutableList.of("bar"); 也准确地描述了我所说的。 bar 是您的 List&lt;String&gt; 类型的新实例。
    • 好吧,你是对的,在这种情况下,向下转换到接口是没有意义的。但是bar 不是一个新实例,它是同一个实例。由于ListList&lt;E&gt; 在Java 中是相同的(原始)类型,因此它们经常可以互换使用。
    • @TavianBarnes >.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2011-11-25
    相关资源
    最近更新 更多