【问题标题】:Iterable<String> to Iterable<T>可迭代<String> 到可迭代<T>
【发布时间】:2016-12-25 13:40:57
【问题描述】:

被覆盖的方法想要返回Iterable&lt;T&gt;,但在方法内部我有Iterable&lt;String&gt;。如何从Iterable&lt;String&gt; 甚至Set&lt;String&gt; 返回Iterable&lt;T&gt;

代码:

@Override
public Iterable<T> getAll() {
   Set<String> set = getCache().keySet();
   Iterable<String> iter = set;
   return ?
}

【问题讨论】:

  • 如果泛型总是一个字符串,为什么还要使用它?
  • 您要返回什么?是keySet 吗?如果是这样,您的方法返回类型应该是Iterable&lt;String&gt;,但我怀疑您应该返回其他东西,这将是Iterable&lt;T&gt;
  • 是的,我应该返回 Iterable,但我有一个 Set。可以转换吗?

标签: java generics iterable


【解决方案1】:

简单的答案 - 你不能。无法转换。

声明Iterable&lt;T&gt; getAll() 表示该方法应返回一个Iterable,该Iterable 传递T 的实例,其中T 表示实例化封闭泛型类型时使用的参数类型。

如果您的代码只能返回一个Iterable&lt;String&gt;,那么它只有在TString 时才满足调用站点的类型要求。如果这是可以接受的,那么你不妨去掉泛型类型参数T

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 2019-08-15
    • 1970-01-01
    • 2015-07-23
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    相关资源
    最近更新 更多