1

在 C# 中

class ListMap<K, E>
    : ImyMap<K, E>, IComparable<K>, IEnumerable<KeyValuePair<K, E>>
{
}

在爪哇

class MyListMap<K extends Comparable<? super K>, E>
    implements MyMap<K,E>, Iterable<KeyValuePair<K, E>>
{
}

只是试图将一些数据结构从 Java 转换为 C#,并想知道我的 C# 实现是否与我的 Java 相同。

如果不是,请您纠正它吗?

4

1 回答 1

6

不,那些不相等。该K extends ...部分需要转换为约束:

class ListMap<K, E>
    : ImyMap<K, E>, IEnumerable<KeyValuePair<K, E>>
   where K : IComparable<K>
{
}

通配符? super K在 C# 中不是必需的。通配符是 Java 支持协/逆变的方式。在 C# 中,这是作为接口声明的一部分完成的:

interface IComparable<in K> { ... }

修饰符使接口逆变,这in与Java中的通配符具有相同的效果。

于 2012-11-21T16:22:20.927 回答