我有以下代码:

    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的风险)。

10-08 14:28