void run() {
...
if (done) return cancel();
...
}
www.un.org/chinese/ga/president 这赢得了编集......我可以几乎<>/em>理解原因。 但是,如果我希望从一个真空中恢复一个空白,为什么不呢? 相反,我最后写道:
if (done) {
cancel();
return;
}
我不想看法风格的建议,我想知道,为什么 Java明禁止这种无效的返回。 感谢。
void run() {
...
if (done) return cancel();
...
}
www.un.org/chinese/ga/president 这赢得了编集......我可以几乎<>/em>理解原因。 但是,如果我希望从一个真空中恢复一个空白,为什么不呢? 相反,我最后写道:
if (done) {
cancel();
return;
}
我不想看法风格的建议,我想知道,为什么 Java明禁止这种无效的返回。 感谢。
附有表述的返回声明重申了这一表述的价值。 <代码>cancel()的类型是无效的表述,它有t
顺便说一句,你希望执行<代码>cancel(),然后回去——这样你必须说。 这两项行动(cancel(
>,然后返回)在逻辑上是不同的。
Now, 避免
,但这不仅会影响回报价值。
这是一个令人感兴趣的问题。 由于java强制实行一种回归类型(void/code>为一种回报类型),你的第一次发言似乎具有意义。 我只考虑公约。 由于<条码>撤销条码>是一个地方持有人,而不是一个标的,因此可能决定将其删除,使之不必使用语文的同义词或编纂者作简化。
http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.17“rel=“noreferer”>JLS 。
不得作任何表述的返回声明必须载于采用关键词句宣布的方法的正文中,不得退还任何价值(第8.4段),或放在建筑商身上(第8.8段)。
进一步
To be precise, a return statement with no Expression always completes abruptly, the reason being a return with no value
它像书面一样:
void v = (void) 1;
return (v);
因此,我想void/code>不是 Java的
type
。 在C++中,return核销(>);
为合法。 作为熟悉 Java的C++方案制定者,答案是:在 Java辛没有支持很多东西。 或许可以简单或易读。
Without f()
declaration is similar to a procedure f(
declaration in pascal and a procedure could not re any Value such as functions, so we must calls in a separate statement.
由于您没有t return> , 即:
It s a tautology. Meaning, void defines that the method has no return value. Therefore, how can you "return void" when void is no return at all?
The return cancel()
statement must return a valid value, but the method declaration void run()
declares that run()
does not return a value; hence, return cancel()
in run()
is an error. The return
statement (without an expression) attempts to transfer control to the caller and is used when the method return type is void
; hence, not an error.
rel=“nofollow”>JLS ∗return * 声明
国家:
A return statement with no Expression attempts to transfer control to the invoker of the method or constructor that contains it. [...] A return statement with an Expression must be contained in a method declaration that is declared to return a value (§8.4) or a compile-time error occurs. The Expression must denote a variable or value of some type T, or a compile-time error occurs. The type T must be assignable (§5.2) to the declared result type of the method, or a compile-time error occurs.
The JLS Method型回归/code> section 国家:
一种方法的回报类型宣布,如果方法回报价值,其价值类型即为无效。 如果并且只有在以下条件允许的情况下,R1号回归类型R1即为另一种回归类型R2的方法的回归类型替代物:[......]R1无效,R2无效。
The JLS Types, Values, and Variables chapter, first paragraph states:
Java节目使用的语言是很强的类型,这意味着每个变数和每个表达方式都有汇编时已知的类型。 类型限制变数(第412段)可以持有的或表达能够产生的价值,限制这些价值支持的行动,并确定行动的含义。
The JLS The Kinds of Natures and Values
:
Java方案拟订语言有两种类型:原始类型(第4.2节)和参考类型(第4.3节)。 相应地,可以储存在变数中的两种数据值,作为论据,通过方法回馈,并按原始价值(第4.2段)和参考价值(第4.3段)操作。
现在仅举几个例子。 缩略语: 国家:
与C和C++不同的是, Java方案语言只允许某些形式的表述作为表述。 注: Java方案措辞不允许“更改为无效”即不属于类型
The JLS Method Body section 国家:
如果一种方法被宣布无效,则其身体不得包含任何带有表述的返回声明(第14.17条)。
最后,JLS Method Declarations
国家:
一种方法声明要么具体规定了方法回报的价值类型,要么使用关键词表示该方法不退还价值。
现在,当我们齐心协力,我们就能够提出以下几点:
return
statement contains an expression, the expression must evaluate to a valid value.return
expression value must be a primitive type or a reference type.void
is not a valid value type.void
return type, returns no value.void run()
does not return a value.run()
, return
, without an expression, will happily transfer control to the caller.run()
, return some expression
is an error because some expression
must be a valid value and run()
does not return a value.<代码>return x系指“退还价值x”,而不论这种类型如何(当然,这种类型仍须与所说明的任何功能的返回类型相称)。
投票不是真正的。 选民只是一个地方持有人,使方法定义的辛迪加更加一致。 这并不是 j的革新,而是从C继承的。
因此,即使方法<代码>cancel(<><>>> 代码/代码>为<代码>,汇编者也不允许你写上<代码>return核销(>。
有趣的想法。 主要问题是语言光谱,它把返回声明定义为由<代码>return <expression>组成。 无效方法为
阁下发现,你可以通过执行无效方法复制功能,然后返回,因此没有真正的理由允许这种功能。
摘自JLS:
A return statement with no Expression must be contained in the body of a method that is declared, using the keyword void, not to return any value, or in the body of a constructor
......
A return statement with an Expression must be contained in a method declaration that is declared to return a value or a compile-time error occurs. The Expression must denote a variable or value of some type T, or a compile-time error occurs. The type T must be assignable to the declared result type of the method, or a compile-time error occurs.
http://java.sun.com/docs/books/jls/first_edition/html/19.doc.html” rel=“nofollow” Java grammar实际上不关心某种方法的类型,从而不解决问题。 在分类检查系统中,它必须比链条更远。 我认为,底线是:if在交回关键词之后列入书面选修声明,然后该系统预计会有价值。
当然,这当然没有真正解释对你的问题的回答。 正如你指出的那样,没有理由不允许这种区别。 但没有理由允许这样做。 因此,它 to了。 人们可以设法合理解释为什么他们做了些什么,但这可能是毫无意义的。
解决这一问题的适当途径是:
void run() {
...
if (done) {
cancel();
return;
}
...
}
Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...
Check this, List<String> list = new ArrayList<String>(); for (int i = 0; i < 10000; i++) { String value = (""+UUID.randomUUID().getLeastSignificantBits()).substring(3, ...
I am in the middle of solving a problem where I think it s best suited for a decorator and a state pattern. The high level setting is something like a sandwich maker and dispenser, where I have a set ...
I have been trying to execute a MS SQL Server stored procedure via JDBC today and have been unsuccessful thus far. The stored procedure has 1 input and 1 output parameter. With every combination I ...
I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...
If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...
I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....
I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...