虽然我不是在c#中使用out参数的忠实粉丝,但我想知道为什么Java选择不将其包含在语言语法中。是否有任何特殊原因或可能是因为一个人可以简单地将一个对象作为参数类型传递?
答案 0 :(得分:9)
可能是因为设计师觉得不需要允许多种方式返回物体。
可以询问有关代表,通用等的同样问题。
但事实上,C#设计师从Java的错误/不便中吸取了教训,这就是为什么我说过很多人认为C#是更好的语言。
答案 1 :(得分:8)
Java被设计成一种非常简单的语言,语法非常简单 - 与C ++形成对比的"Spartan OO programming language",其丰富的功能几乎没有人完全了解和理解(包括编译器实现者)。 / p>
基本上,功能被省略,除非它们被认为是绝对必要的。
一方面,目标已实现 - 很少有领域的Java行为难以理解或预测。
另一方面,缺少的功能必须解决,这导致Java的诽谤冗长。 C#的设计者试图以此经验为基础。
但是,我个人不会把参数算作一个很大的损失。
答案 2 :(得分:3)
out
参数的第一个用例是与本机代码平滑互操作。
由于Java没有优先使用本机代码进行平滑互操作,因此它并不特别需要此功能。
输出或参数参数无需逻辑。因为它们可用,它们已经成为CLR语言中常见习语的一部分,“TryXXX”习惯用于非抛出方法的版本。但这可以通过返回复合值类型(C#中的struct
)来完成:
struct TryResult<T>
{
public T Result;
public bool Succeeded;
}
TryResult<int> Parse(string intString)
{
...
答案 3 :(得分:2)
具有out参数基本上允许来自方法的两个返回值。
Java将此功能用于简化其语法,并消除了误用和编程错误的可能性。
答案 4 :(得分:1)
为了返回多个值,您可以让方法返回一个对象或一组对象。因此,您不一定需要输出参数来返回方法中的项目。
答案 5 :(得分:1)
听起来好像Java和C#是在同一时间设计的。请记住,Java已有将近15年的历史。缺少参数(如果你可以称之为缺乏参数)是其遗漏的最小部分。
答案 6 :(得分:0)
随机功能进入C#的门槛要低得多。 “Out”参数没有那么有用(并且被滥用),因此Java中不支持它们。在Project Coin下为JDK7提交了许多功能,但IIRC输出的参数不在其中。
答案 7 :(得分:0)
我觉得我必须在这里遗漏一些东西,所以我已经完全准备好被遗忘了......
Java不像C ++那样支持“out”参数吗?我的C#-fu不是很强大,但我认为out关键字只是告诉编译器允许在方法内部更改对象的一种方式。如果我是对的,那么Java和C ++也支持这一点,只是没有使用关键字的明确(和IMHO很好的区别)。在C ++中,您可以将指针或引用传递给函数,函数可以以任何方式修改对象。也许它更像是C#的实现,传递一个指向指针的函数并让函数在那里分配一个对象,但无论如何。在Java中,您可以实现前者与在C ++中使用引用完全相同,因为每个对象都是Java中的引用。
那么,我的方式错误在哪里?必须有一个没有人提到这一点的理由。我期待着学习它是什么。