我正在尝试在实例初始化程序块中放置一个空的return语句,以便在字符串为null但是编译器说"无法从初始化程序中返回时退出#34; ,我已经在堆栈溢出中找到了这个答案this answer,但是关于" 静态初始化程序"也许我的情况不同,这是代码:
lsDestinatari.parallelStream().forEach(o->{
pushManagerDB.insert("log_notifiche",new HashMap<String, Object>(){{
String logContent = pushToPlayers(getPlayersFromUser(o,pushManagerDB),content,data,page);
if(logContent==null)
return;
put("content", logContent);
//TODO[...]
}});
});
答案 0 :(得分:1)
您无法在初始值设定项中添加return
:正如JLS Sec 8.6中所述:
如果返回语句(第14.17节)出现在实例初始值设定项中的任何位置,则为编译时错误。
在这种情况下,您不需要:只在非空案例中put
:
if (logContent != null) {
put("content", logContent);
}
但请注意,根本不需要使用初始化程序。我知道有些人认为双支撑初始化是一个聪明的伎俩;但老实说,它比它的价值更麻烦。您创建了不必要的子类,可能包含导致内存泄漏,中断序列化等的引用。所有这些都是为了“保存”几行代码。
只需在插入调用之外构建地图:
String logContent = pushToPlayers(getPlayersFromUser(o,pushManagerDB),content,data,page);
HashMap<String, Object> map = new HashMap<>();
if (logContent != null) {
map.put("content", logContent);
}
pushManagerDB.insert("log_notifiche", map);
或
pushManagerDB.insert(
"log_notifiche",
logContent != null
? Collections.singletonMap("content", logContent)
: Collections.emptyMap());