javavoid返回_关于java:Void⽅法不能返回void⽅法的值?我不介意我不明⽩,但我想知道为什么会这样:
void something(String a) {
return hi();
}
void hi() {
return;
}
奇怪的是,hi()的返回类型void。 我在IDE中遇到语法错误:
Void methods cannot return a value
此外,代码不编译:
Exception in thread"main" java.lang.Error: Unresolved compilation problem:
Void methods cannot return a value
at Resources.setSystemProperties(Resources.java:33)
at Resources.main(Resources.java:49)
我希望这会发⽣:
hi() -> return nothing
return [nothing] -> hi() is nothing
所以最后,它什么都不返回,就像void⽅法⼀样。
为什么会出现这种情况? 当返回void⽅法的结果时,为什么代码不能编译?
答案:void⽅法⽆法返回值。 就如此容易。
并且a.notify()是void ...那么为什么我不能返回结果呢? 我有三个答案,但似乎没有⼈试图真正回答我的问题
return ;和return;之间存在差异。 我想这就是令你困惑的事情。
看看Scala,它有点像你在这⾥想做的那样。 Java没有。
@SotiriosDelimanolis我想OP对我上次评论感到困惑
这在JLS 14.17中定义:
A return statement with an Expression must be contained in one of the following, or a compile-time error occurs:
A method that is declared to return a valuewrite的返回值
A lambda expression
未声明void⽅法返回值,因此在这样的⽅法中不能发⽣带有表达式的return语句(如函数调⽤)。
此外,由于JLS 15.12.3中的此语⾔,您⽆法返回void⽅法的结果:
If the compile-time declaration is void, then the method invocation must be a top level expression (that is, the Expression in an expression statement or in the ForInit or ForUpdate part of a for statement), or a compile-time error occurs.
换句话说,因为a.notify()是void,你可以在它看起来像⼀个语句的上下⽂中使⽤它(即,所有单独在⼀⾏上),但不能在它看起来像表达式的上下⽂中使⽤它(即,你可以' t将其值赋给变量,返回它等。
我发誓,所有这些答案......这个实际上让我有点理解这种⾏为。 谢谢。
因为这就是语⾔的运作⽅式。您不能使⽤return关键字在返回类型为void的⽅法中返回值。 void不是可以传递的实际值:
The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void.
这是James Iry的⼀篇⽂章,将Java中的void与Scala中的Unit进⾏⽐较。 (与void不同,unit是可以返回的实际值。)他演⽰了使⽤Unit类型⽽不是void的优点:
Java, C++, and C# programmers do solve this problem all the time. One common option is to not use Function but some other concept like"Action" to mean a function that takes a string, performs a side effect, and returns nothing useful. Then you essentially duplicate"map" into something called perhaps"foreach" that expects an Action and returns void. That probably makes sense in this case since a list of references to a meaningless value is perhaps silly, but it also means a great deal of co
de duplication if this kind of higher order programming is common. For instance, you can't write just one compose function that creates a function from two other functions, you also have to write a compose that takes an action and a function to create an action.
@Codebender:对,修好了。
@Zizouz212:明⽩了,这只是⼀个⾮常糟糕的例⼦。 你可以使⽤返回类型为void的另⼀个⽅法。
当然,在那种情况下,我会这样做。
声明为void的函数不能return任何东西,就像错误所说的那样。你假设a.notify()返回任何东西都是假的,因为a.notify()也不能返回任何东西(因为它是⽆效的)。
return statements simply cannot be used with `Void` as it's Return type.
你⽆法改变语⾔规则!
Java编译器不会那么深⼊。当它在void函数中看到返回关键字后⾯带有⼀些值时会抛出编译错误。这是编程的。就如此容易。
我可以将简单的return;放在我的代码中......没有错误
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论