Java有与C#的元组等效的变量类型吗?

Ati*_*MVP 7 .net c# java tuples

我正在将程序从C#转换为Java.在C#代码中,开发人员使用Tuple.我需要将这个C#代码翻译成Java代码.因此,Java是否具有与C#的元组等效的变量类型?

Sam*_*ell 5

由于类型擦除,Java 中无法精确反映 .NET 中的各种Tuple类。然而,这里是一个 BSD 许可的JavaTuple2和实现Tuple3,它镜像了.NET 中的Tuple<T1, T2>Tuple<T1, T2, T3>类型。

在 Java 中可以做但在 C# 中不能做的一件很酷的事情是:

class Bar extends Foo { }

...

Tuple2<? extends Foo, ? extends Foo> tuple = Tuple.create(new Bar(), new Bar());
Run Code Online (Sandbox Code Playgroud)

在 C# 中,您必须使用强制转换:

Tuple<Foo, Foo> tuple = Tuple.Create((Foo)new Bar(), (Foo)new Bar());
Run Code Online (Sandbox Code Playgroud)

  • @Servy 和 @Jamie, `Tuple.Create(new Bar(), new Bar())` 将返回 `Tuple&lt;Bar, Bar&gt;` 的实例 - `Tuple&lt;Foo, Foo&gt; tuple = Tuple.Create(new Bar(), new Bar())` 将无法编译,因为 Tuple 不支持协方差。要使其在 C# 中工作,您需要使用构造函数 - `Tuple&lt;Foo, Foo&gt; tuple = new Tuple&lt;Foo, Foo&gt;(new Bar(), new Bar())` (4认同)
  • @Servy C# 示例的要点是强制转换“不是”多余的。 (2认同)