我遇到一种情况,其中一个非void方法缺少一个return语句,代码仍然编译.我知道while循环之后的语句是无法访问的(死代码),永远不会被执行.但为什么编译器甚至不警告返回什么?或者为什么一种语言允许我们使用无效循环且不返回任何内容的非void方法?
public int doNotReturnAnything() {
while(true) {
//do something
}
//no return statement
}
Run Code Online (Sandbox Code Playgroud)
如果我在while循环中添加break语句(甚至是条件语句),编译器会抱怨臭名昭着的错误:Method does not return a value
在Eclipse和Not all code paths return a value
Visual Studio中.
public int doNotReturnAnything() {
while(true) {
if(mustReturn) break;
//do something
}
//no return statement
}
Run Code Online (Sandbox Code Playgroud)
Java和C#都是如此.
interface A {
public void doSomething();
}
interface B extends A {
public void doSomethingElse();
}
public class AClass implements A, B {
public void doSomething() {}
public void doSomethingElse() {}
}
Run Code Online (Sandbox Code Playgroud)
为什么Java允许这样的声明?通过实现SubInterface(B)可以实现同样的事情,实现两个接口的用途是什么?