我正在玩Java8并遇到了一个基本场景,该场景说明了陷阱22,其中修复一个编译错误会导致另一个编译错误。场景(这只是一个从更复杂的东西简化而来的例子):publicstaticListcatch22(Listinput){Listresult=null;if(input!=null){result=newArrayList(input.size());input.forEach(e->result.add(e));//compileerrorhere}returnresult;}编译错误:Localvariableresultdefinedinanenclosingscopemustb
我们从软件供应商那里收到了Java代码。它包含很多try-catchblock,而catch部分没有任何内容。他们到处都是。示例:try{spaceBlock.enable(LindsayModel);}catch(Exceptione){}我的问题是:上述做法是否可以接受?如果是这样,什么时候?还是我应该继续删除所有这些“伪造的”try和catch语句?对我来说,这看起来像是糟糕的做法,但我在Java方面经验不足,无法确定。如果您不打算对它们做任何事情,为什么要捕获错误呢?在我看来,只有当您确信异常绝对不会造成任何后果并且您不在乎是否会发生时,您才会这样做。但是,在我们的特定应用程序
这个问题在这里已经有了答案:DoesafinallyblockalwaysgetexecutedinJava?(51个答案)关闭9年前。这就是我想要做的:try{//code}catch(Exceptione){returnfalse;}finally{//closeresources}这行得通吗?这是不好的做法吗?这样做会更好吗:booleaninserted=true;try{//code}catch(Exceptione){inserted=false;}finally{//closeresources}returninserted;
这个问题在这里已经有了答案:Closeresourcequietlyusingtry-with-resources(4个答案)关闭去年。我正在阅读有关JDK7中的try-with-resource的信息,当我考虑升级我的应用程序以使用JDK7运行时,我遇到了这个问题..例如,当使用BufferedReader时,写入抛出IOException而关闭抛出IOException..在catchblock中我担心写入抛出的IOException..但我不太关心关闭抛出的那个..同样的问题与数据库连接..和任何其他资源..例如,我创建了一个可自动关闭的资源:publicclassAutoClo
我正在使用以下代码来测试tryblock有多慢。令我惊讶的是,tryblock使它更快。为什么?publicclassTest{intvalue;publicintgetValue(){returnvalue;}publicvoidreset(){value=0;}//Calculateswithoutexceptionpublicvoidmethod1(inti){value=((value+i)/i)我的机器运行的是64位Windows7和64位JDK7。我得到以下结果:method1took914ms,resultwas2method1withtryblocktook789ms,
假设我可以一组语句:try{Stringa=getProperty("a");Stringb=getProperty("b");Stringc=getProperty("c");}catch(Exceptione){}现在,假设属性b未找到并且函数抛出异常。在这种情况下,我将如何继续或将b设置为null而不必为每个属性编写一个try-catchblock?我的意思是,a、b、c存在,但有时可能根本找不到它们,在此期间会引发异常。 最佳答案 假设您无法更改函数以便在未找到该属性时它返回null,那么您有点卡住了,将所有内容都包装在它自
我在使用Android时遇到了问题。我在设备上开发并且在捕获异常时遇到问题。我在AsyncTask中运行一些代码,最后将其简化为:try{if(true)thrownewException("ERROR");}catch(Exceptione){Log.e("e","exception",e);}我的问题是“e”变量始终为空。不确定实际发生了什么。更重要的是它有时会起作用,但我不能说什么时候。我刚从电脑上起来几分钟,然后回来,砰的一声,它工作了。编码几分钟又一次它是空的......大约1年前有一个关于SO的问题,但没有人知道答案。也许这次有人会有一些想法。我认为它与AsyncTask有
即使我使用try-with-resources,为什么Eclipse对以下代码发出奇怪的“资源泄漏:zin从未关闭”警告:Pathfile=Paths.get("file.zip");//Resourceleakwarning!try(ZipInputStreamzin=newZipInputStream(Files.newInputStream(file))){for(inti=0;i如果我修改代码中的“任何内容”,警告就会消失。下面我列出了3个修改后的版本,它们都可以(没有警告)。Mod#1:如果我从tryblock中删除for循环,警告就会消失://ThisisOK(nowarn
我尝试将以下简单代码转换为函数式样式for(Stringstr:list){if(someCondition(str)){list2.add(doSomeThing(str));}else{list2.add(doSomethingElse(str));}}是否可以轻松地将此循环替换为流?我看到的唯一选择是使用两个不同的过滤条件对流进行两次迭代。 最佳答案 听起来你可以在条件下使用map:Listlist2=list.stream().map(str->someCondition(str)?doSomething(str):doSo
例如,在Java中使用try/catchblock而不是使用多个If语句来检查用户输入是否更好、更便宜或更具可读性?解析Date字符串的例子,直接使用try/catchblock解析而不是编写多个语句来查找非法字符不是更好吗?在另一个例子中,假设我想读取一个文件或流,而不是使用Scanner,我只是强制该方法并等待异常发生。这是一种健康的编程方法吗?它在虚拟机上更便宜吗?更新这是我在usingDateFormatexception时的意思的示例,有时捕获错误可能是一个真正的问题,并且在这样做时,您能否保证您的复杂(通常不可读)代码容易出错? 最佳答案