变量尚未在 Java 中初始化
Variable has not have been initialized in Java
以下代码无法编译,因为变量 'rt' 尚未初始化。
我希望代码在 switch 语句中初始化 'rt',或者当默认情况为 运行.
时不再使用 'rt'
这是我写的代码:
enum RequestType {leader, candidate};
private void processRequest(String input) {
boolean inputOK = true;
RequestType rt;
String[] split = input.split(":");
if (!input.contains(":")) {
inputOK = false;
}
else {
if (split.length != 3) {
inputOK = false;
}
else {
int port = Integer.parseInt(split[2]);
if (!(port > 0 && port < 65537)) {
inputOK = false;
}
else {
switch (split[0]) {
case "Leader":
rt = RequestType.leader;
break;
case "Candidate":
rt = RequestType.candidate;
break;
default:
inputOK = false;
}
}
}
}
if (!inputOK) {
return;
}
String address = split[1].concat(split[2]);
if (rt == RequestType.leader) {
keepingLeader(address);
}
您没有在默认块或许多 ifs 中初始化 rt
。
编译器不会查看 rt
的读取相对于 inputOK
的值是否可达,它只查看它是否完全可达。
最简单的方法就是立即 return 您当前 inputOK = false;
。
或者,您可以在声明时为 rt
分配一个默认值,例如 null
。问题是它破坏了编译器现在正在做的检查——你实际上已经在所有情况下都分配了它,所以你不会不小心使用默认值。
相反,您可以使用 rt
的无效性来代替单独的布尔值:
- 在您当前分配
inputOK = false
的位置,改为分配 rt = null
;
- 然后检查
!inputOK
和 return 如果为真,请检查 rt == null
。
以下代码无法编译,因为变量 'rt' 尚未初始化。
我希望代码在 switch 语句中初始化 'rt',或者当默认情况为 运行.
时不再使用 'rt'这是我写的代码:
enum RequestType {leader, candidate};
private void processRequest(String input) {
boolean inputOK = true;
RequestType rt;
String[] split = input.split(":");
if (!input.contains(":")) {
inputOK = false;
}
else {
if (split.length != 3) {
inputOK = false;
}
else {
int port = Integer.parseInt(split[2]);
if (!(port > 0 && port < 65537)) {
inputOK = false;
}
else {
switch (split[0]) {
case "Leader":
rt = RequestType.leader;
break;
case "Candidate":
rt = RequestType.candidate;
break;
default:
inputOK = false;
}
}
}
}
if (!inputOK) {
return;
}
String address = split[1].concat(split[2]);
if (rt == RequestType.leader) {
keepingLeader(address);
}
您没有在默认块或许多 ifs 中初始化 rt
。
编译器不会查看 rt
的读取相对于 inputOK
的值是否可达,它只查看它是否完全可达。
最简单的方法就是立即 return 您当前 inputOK = false;
。
或者,您可以在声明时为 rt
分配一个默认值,例如 null
。问题是它破坏了编译器现在正在做的检查——你实际上已经在所有情况下都分配了它,所以你不会不小心使用默认值。
相反,您可以使用 rt
的无效性来代替单独的布尔值:
- 在您当前分配
inputOK = false
的位置,改为分配rt = null
; - 然后检查
!inputOK
和 return 如果为真,请检查rt == null
。