我有以下代码:
String serviceType;
ServiceBrowser tmpBrowser;
for (String playerName: players) {
serviceType = "_" + playerName + "._tcp";
tmpBrowser = BrowsersGenerator.getBrowser(serviceType);
tmpBrowser.browse();
System.out.println(tmpBrowser.getStatus());
}
System.out.println(tmpBrowser.getStatus());
编译器抱怨最后一行。它写道:“变量tmpBrowser可能未初始化”。如果我在最后一行发表评论,编译不会抱怨。
最佳答案
如果没有players
,那么就不会以任何方式初始化tmpBrowser
。编译器无法预测是否有任何播放器。此外,与字段(在方法块外部声明的类/实例变量)相反,局部变量(在方法块内部声明的变量)不会使用默认值进行预初始化。您需要通过自己进行预初始化来使编译器满意:
ServiceBrowser tmpBrowser = null;
(不要忘了在
getStatus()
之前进行nullcheck,否则可能会冒NPE的风险)。