【发布时间】:2014-05-21 14:52:52
【问题描述】:
我想知道为什么Stack中的push方法有返回类型? 我检查了 Oracles 文档,但只提到了返回类型。谁能告诉我为什么需要返回类型?
【问题讨论】:
-
见this question。无论如何,如果您不想使用结果,则不必使用。只需说
stk.push(element),不要将结果分配给任何东西。返回的值将被忽略。
我想知道为什么Stack中的push方法有返回类型? 我检查了 Oracles 文档,但只提到了返回类型。谁能告诉我为什么需要返回类型?
【问题讨论】:
stk.push(element),不要将结果分配给任何东西。返回的值将被忽略。
您不是必须使用返回类型。您可以简单地忽略它,这是最有可能的用例。但是,如果您想创建被推送的对象,将其推送到堆栈并维护对它的引用,这可能会很有用,所有这些都只需要一行代码。
MyObject newOne = stk.push(new MyOjbect());
堆栈的顶部现在包含对新创建的 MyObject 实例的引用,但您在它被推送的范围内也有对它的引用,以防您需要它执行进一步的操作而不将其从堆栈中删除.
如果您非常关心开销,您可以简单地使用 addElement() 方法,它可以做完全相同的事情,但方法开销更少且没有返回值。如果您查看与您的 Java SDK 捆绑在一起的 Java 源代码,您会发现 push() 正在调用 addElement():
public E push(E item) {
addElement(item);
return item;
}
【讨论】:
被推送的项目也被返回,如API docs:
推
public E push(E item)<p>将一个项目推入此堆栈的顶部。这与以下效果完全相同:
addElement(item)参数:
item - 要压入此堆栈的项目。
返回:
item 参数。
另见:
Vector.addElement(E)
当一个对象被立即检索和推送时,这可能很有用 - 像这样:
Something something = GetANew.something();
stack.push(something);
比这个长:
Something something = stack.push(GetANew.something());
当然只是为了方便。
【讨论】: