我有一个可重现的测试用例:
public class TestCase {
private final java.util.function.Consumer<Object> emptyCallback = result -> {};
public TestCase() {
return;
}
public static void main(String... args) {
new TestCase();
}
}
Run Code Online (Sandbox Code Playgroud)
使用Java 8,更新51(Oracle JDK).使用IntelliJ和javac都无法编译.
IntelliJ输出:
Error(6, 7): java: variable result might not have been initialized
Run Code Online (Sandbox Code Playgroud)
javac输出:
TestCase.java:6: error: Variable result might not have been initialized
return;
^
1 error
Run Code Online (Sandbox Code Playgroud)
现在奇怪的是,删除return;或Consumer将修复错误.这是一个java bug,还是我在这里缺少一些语言设计?
编辑:这不是一个重复的构造函数如何返回一个值,这实际上是一个构造函数,并不是关于构造函数的返回值,而是变量初始化.
我在java中编写这个简单的类只是为了测试它的一些功能.
public class class1 {
public static Integer value=0;
public class1() {
da();
}
public int da() {
class1.value=class1.value+1;
return 5;
}
public static void main(String[] args) {
class1 h = new class1();
class1 h2 = new class1();
System.out.println(class1.value);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是:
2
但是在这段代码中:
public class class1 {
public static Integer value=0;
public void class1() {
da();
}
public int da() {
class1.value=class1.value+1;
return 5;
}
public static void main(String[] args) {
class1 h = new class1();
class1 h2 = …Run Code Online (Sandbox Code Playgroud)