Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以在实例初始值设定项中放置一个空的return语句吗?_Java_Initializer - Fatal编程技术网

Java 我可以在实例初始值设定项中放置一个空的return语句吗?

Java 我可以在实例初始值设定项中放置一个空的return语句吗?,java,initializer,Java,Initializer,我试图在实例初始值设定项块中放置一个空的return语句,以在字符串为null但编译器说“无法从初始值设定项中返回”的情况下退出,我在堆栈溢出中找到了这个答案,但它是关于“静态初始值设定项”,可能我的情况不同,这是代码: lsDestinatari.parallelStream().forEach(o->{ pushManagerDB.insert("log_notifiche",new HashMap<String, Object>(){{ Strin

我试图在实例初始值设定项块中放置一个空的return语句,以在字符串为null但编译器说“无法从初始值设定项中返回”的情况下退出,我在堆栈溢出中找到了这个答案,但它是关于“静态初始值设定项”,可能我的情况不同,这是代码:

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[...]     
    }});
});         
lsDestinatari.parallelStream().forEach(o->{
insert(“log_notifiche”,new HashMap()){{
字符串logContent=pushToPlayers(GetPlayerFromUser(o,pushManagerDB),内容,数据,页面);
if(logContent==null)
返回;
put(“内容”,logContent);
//待办事项[…]
}});
});         

您不能在初始值设定项中放入
返回值
:如中所述:

如果返回语句(§14.17)出现在实例初始值设定项中的任何位置,则为编译时错误

在这种情况下,您不需要:仅在非空的情况下放置:

if (logContent != null) {
  put("content", logContent);
}

但请注意,根本不需要使用初始值设定项。我知道有些人认为双括号初始化是一个聪明的把戏;但老实说,这比它的价值更麻烦。创建不必要的子类,可能包含导致内存泄漏的引用,中断序列化等,所有这些都是为了“保存”几行代码

只需在insert调用之外构建映射:

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);

不,你不能,就像编译器告诉你的那样。简单的解决方法是,不要使用返回。@pvg我正在寻找另一种解决方法。@MikeD3ViDTyson除了不使用
返回
,或不使用初始值设定项之外,没有其他解决方法。这是规格上的错误。那么,你为什么要寻找一个不同的解决方案,你认为不同的解决方案会是什么样子?@MikeD3ViDTyson这很好,但这并不是一个真正可以回答的具体问题,就像“我还没有找到我要找的”一样。“我们应该告诉你什么,去看那些没有名字的街道?”MikeD3ViDTyson,那是因为那张海报在问一个特定的问题。你是说你不喜欢JLS,这不是一个真正的问题。规范上说“你不能使用return”,你说“但是我想要”。@MikeD3ViDTyson不。如果你需要使用
return
,你可能试图在初始值设定项中做得太多了。建议你,@Mike,当编译器说你不能做某事时,不要那么快相信它;只有99.9999999…99%的时间(;->)是正确的。@AndyTurner好的,三元op非常可爱。我会选择的,这是一个荣誉与谷歌工程师(我是认真的)谢谢@凯文·安德森(KevinAnderson)——(KevinAnderson)
pushManagerDB.insert(
    "log_notifiche",
    logContent != null
        ? Collections.singletonMap("content", logContent)
        : Collections.emptyMap());