【问题标题】:C# to Java rewriting - generic classC# 到 Java 重写 - 泛型类
【发布时间】:2012-02-17 12:44:30
【问题描述】:

这个C#代码可以改写成java吗?

public interface IEnumerable<out T> : IEnumerable
{

    IEnumerator<T> GetEnumerator();
}

我在创建名称中带有参数 T 的泛型类时遇到问题。我也不知道,如何解决 Java 不支持的参数。有谁在这两个平台上都有经验?

【问题讨论】:

  • IEnumerable 的等价物是 Iterable。你不需要写这个。

标签: c# java rewrite


【解决方案1】:

这里的out 不是正常意义上的out 参数——它表示IEnumerable&lt;T&gt;T 中是协变的。这让你可以说,例如:

IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;

基本上,Java 处理泛型差异的方式非常不同。事实上,Java 中的泛型在总体上是非常不同的 - 查看Java Generics FAQ 以获得更多详细信息。很多

在Java 中IEnumerable&lt;T&gt; 的近等价物是Iterable&lt;T&gt; - 你最好使用它而不是复制IEnumerable&lt;T&gt;。 (例如,Iterable&lt;T&gt; 在 Java 中以“增强的 for 循环”的形式提供语言支持。)

【讨论】:

    【解决方案2】:

    我不是 C# 编码器,但以下代码可能有效:

    public interface IEnumerable<T> {
        Iterable<T> getEnumerator();
    }
    

    【讨论】:

    • IEnumerable 是可迭代的。理论上你应该返回 Iterator 但整个事情是没有意义的,因为 Iterable 已经是 Java 的一部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2010-09-26
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多