【发布时间】:2013-02-15 00:34:30
【问题描述】:
所以,我刚开始学习 Java,发现根本没有“通过引用”这种东西。我正在将一个应用程序从 C# 移植到 Java,而原始应用程序具有 int 和 double,它们是“ref”或“out”参数。
起初我以为我可以传入“整数”或“双精度”,因为那是引用类型,所以值会改变。但后来我了解到这些引用类型是不可变的。
所以,我创建了一个“MutableInteger”类和一个“MutableDouble”类,并将它们传递给我的函数。它有效,但我想我必须违背该语言的原始设计意图。
“通过引用传递”是一般糟糕的设计吗?我应该如何改变我的思维方式?
有这样的功能似乎是合理的:
bool MyClass::changeMyAandB(ref int a, ref int b)
{
// perform some computation on a and b here
if (success)
return true;
else return false;
}
这是糟糕的设计吗?
【问题讨论】:
-
是的,这是糟糕的设计。另外,写
return success就行了。 -
... 该函数的最后 3 行也是如此。
return success; -
这对code review stack exchange来说会更好。
-
这在很大程度上取决于程序员/设计师的观点。在 Java 中,设计者虽然是个坏主意,但在 C# 中,设计者虽然保留 C/C++ 语言的概念会很好。因此,您的问题没有真正的答案,因为这取决于用户。
-
@RyanGates 在那里可能是合适的,但我确实认为这是一个很好的 SO 候选人,客观上存在良好的模式和良好的设计,并且许多 SO 问题都涉及这些。
标签: parameter-passing pass-by-reference