Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 任何语言都有延迟返回机制吗?_Java_Return_Delay - Fatal编程技术网

Java 任何语言都有延迟返回机制吗?

Java 任何语言都有延迟返回机制吗?,java,return,delay,Java,Return,Delay,是否有任何语言具有关键字,例如delayedreturn,允许您保存值并仅在方法完成时返回值 例如,类似以下内容(Java语法): 公共整数为空(节点){ delayedreturn节点。getValue(); node.setValue(空); } 我知道这并没有节省多少空间。只是好奇是否有人认为它值得实施。从未见过。但当你能做到这一点时,这并不重要: public Integer nullify(Node<Integer> node){ Integer delayedr

是否有任何语言具有关键字,例如
delayedreturn
,允许您保存值并仅在方法完成时返回值

例如,类似以下内容(Java语法):

公共整数为空(节点){
delayedreturn节点。getValue();
node.setValue(空);
}

我知道这并没有节省多少空间。只是好奇是否有人认为它值得实施。

从未见过。但当你能做到这一点时,这并不重要:

public Integer nullify(Node<Integer> node){
    Integer delayedreturn = node.getValue();
    node.setValue(null);
    return delayedreturn;
}
公共整数为空(节点){
整数delayedreturn=node.getValue();
node.setValue(空);
返回延迟返回;
}

我所知道的语言中没有这样的语言。这样的关键字很可能会导致返回值存储在临时位置,您已经可以完成以下操作:

public Integer nullify (Node<Integer> node) {
    Integer delayedReturn = node.getValue();
    node.setValue(null);
    return delayedReturn;
}
公共整数为空(节点){
整数delayedReturn=node.getValue();
node.setValue(空);
返回延迟返回;
}

它本质上与您的要求相同,只是语法与您提出的不同。

Java确实有一些东西可以满足您的要求,我甚至看到了它的一些合法用途(如果我没有弄错的话,Doug Lea):


一般来说,这是很危险的,因为从
try
抛出的异常可能会被从
finally

抛出的另一个异常掩盖。哇,我们甚至选择了相同的变量名。@JasonC你确实比我快了10秒左右。至少我是这么想的。但按“最老的”排序似乎正好相反。谁在乎呢?没关系,上面写着“1分钟前”,现在,没有人会知道。埃文在问题发布前15分钟开始键入答案。先生我们正在探测一个超粒子流,它是从SO数据中心辐射出来的。。。ZZZZZT(莫名其妙的爆炸控制台)是的,这是我已经做过的。我只是好奇是否有任何语言简化了这个过程。哈!完全相同的答案,但您修复了“r”并将其改为“r”。我想我们甚至在对方的答案中添加了相同的注释。这将导致
NullPointerException
如果
value
已经
null
谢谢,damo,我已经更新了答案。Lee的回答正确地指出了这一点。+1确保您可以使用
返回delayedReturn在finally块中。这里有一篇有点相关的文章:我认为您不需要特殊功能来完成此操作,只需要一个临时值。@PeterLawrey当然是这样,但这就是我使用“节省空间”这个词的原因。(虽然一行并不多,除非所创建的对象具有很长的构造函数/大量泛型。)如果要测量行中的空间,您总是可以删除换行符。即使在返回后,finally语句是否真的执行?参数通过了吗?不管怎么说,这并不是我所说的,但如果它奏效,这是一个很酷的把戏。(不是我会使用的,但很有趣。)
最终保证作为最后一件事执行,因此即使在确定返回值之后。这个把戏在很多方面都是肮脏的,因为它扰乱了异常机制。克里斯,是的。检查JLS。
public Integer nullify (Node<Integer> node) {
    Integer delayedReturn = node.getValue();
    node.setValue(null);
    return delayedReturn;
}
try { return node.getValue(); } 
finally { node.setValue(null); }