我可以在实例初始化程序中放置一个空的 return 语句吗?
Can i put a empty return statement inside an instance initializer?
我正在尝试在实例初始化程序块中放置一个空的 return 语句以在字符串为空但编译器说 "Cannot return from within an initializer" 的情况下退出,我找到了这个答案 this answer 在堆栈溢出上,但它是关于“static initializer”,也许我的情况不同,这是代码:
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[...]
}});
});
你不能在初始值设定项中放入 return
:如 JLS Sec 8.6:
中所述
It is a compile-time error if a return statement (§14.17) appears anywhere within an instance initializer.
在这种情况下,您不需要:仅在非空情况下 put
:
if (logContent != null) {
put("content", logContent);
}
但请注意,根本不需要使用初始化程序。我知道有些人认为双括号初始化是一个聪明的把戏;但老实说,这比它的价值更麻烦。您创建了不必要的子类,可能包含导致内存泄漏、中断序列化等的引用。所有这些都是为了 "saving" 几行代码。
只需在插入调用之外构建地图:
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());
我正在尝试在实例初始化程序块中放置一个空的 return 语句以在字符串为空但编译器说 "Cannot return from within an initializer" 的情况下退出,我找到了这个答案 this answer 在堆栈溢出上,但它是关于“static initializer”,也许我的情况不同,这是代码:
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[...]
}});
});
你不能在初始值设定项中放入 return
:如 JLS Sec 8.6:
It is a compile-time error if a return statement (§14.17) appears anywhere within an instance initializer.
在这种情况下,您不需要:仅在非空情况下 put
:
if (logContent != null) {
put("content", logContent);
}
但请注意,根本不需要使用初始化程序。我知道有些人认为双括号初始化是一个聪明的把戏;但老实说,这比它的价值更麻烦。您创建了不必要的子类,可能包含导致内存泄漏、中断序列化等的引用。所有这些都是为了 "saving" 几行代码。
只需在插入调用之外构建地图:
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());