Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.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
安卓没有';t支持Java v7+;,那么,我应该对instanceof check使用多个catch还是一个catch?_Java_Android_Exception_Try Catch_Java 7 - Fatal编程技术网

安卓没有';t支持Java v7+;,那么,我应该对instanceof check使用多个catch还是一个catch?

安卓没有';t支持Java v7+;,那么,我应该对instanceof check使用多个catch还是一个catch?,java,android,exception,try-catch,java-7,Java,Android,Exception,Try Catch,Java 7,我有以下情况: try{ // Do some things that can cause the exceptions } catch(SomeException ex){ doSomething(); } catch(SomeOtherException ex){ doSomething(); } catch(AndYetAnotherException ex){ doSomething(); } catch(Exception ex){ // Do

我有以下情况:

try{
    // Do some things that can cause the exceptions
}
catch(SomeException ex){
    doSomething();
}
catch(SomeOtherException ex){
    doSomething();
}
catch(AndYetAnotherException ex){
    doSomething();
}
catch(Exception ex){
    // Do something else
}
在Java v7+中,我可以将此更改为:

try{
    // Do some things that can cause the exceptions
}
catch(SomeException | SomeOtherException | AndYetAnotherException ex){
    doSomething();
}
catch(Exception ex){
    // Do something else
}
因为Android还不支持Java7+,所以我不能使用上面提到的。改为执行以下操作的风险是什么:

try{
    // Do some things that can cause the exceptions
}
catch(Exception ex){
    if(ex instanceof SomeException || ex instanceof SomeOtherException || ex instanceof AndYetAnotherException){
        doSomething();
    }
    else{
        // Do something else
    }
}
我对instanceof没有足够的经验或知识,所以我不知道风险。是否存在可能出现的意外结果?在运行时和/或编译期间是否有性能更改?等等


如果没有任何风险、高性能更改或意外结果,那么为什么不使用instanceof进行单个捕获?如果存在任何风险,我想最好使用多个捕获,Android/Java本身和幕后编译都更好地支持多个捕获。

您可以通过主菜单中的窗口>首选项>Java>编译器(替换“Windows”)更新Eclipse以使用Java 7语法检查使用OS X IIRC上的Apple菜单)

但是,请注意,您需要将API级别19+作为构建SDK(主菜单中的项目>属性>Android)。如果它较低,Eclipse/ADT将不高兴,以大量红色像素的形式表示不高兴


但是,如果更改编译器设置并将构建SDK设置为19+,这将启用Java 7语法,包括
SomeException | SomeOtherException |和yetanotherException
语法

您可以使用Java7构建Android应用程序。Java 8目前不受AFAIK支持,除非您告诉它发出向后兼容的字节码。@Commonware我使用最新版本的Eclipse和Android SDK,但当我使用
catch(SomeException | SomeOtherException ex)
时,它给了我一个错误。那么,如果Android支持Java7+,我如何在Eclipse中启用它呢?我大约在2个月前下载了Eclipse和Android SDK,那么它是在过去2个月更新的吗?我只是没有注意到这一点?窗口>首选项>Java>编译器是告诉Eclipse您想要支持什么语法的地方。“那么,它是在过去两个月内更新的,而我只是没有注意到这一点?”——谷歌只是懒得更新文档。在
adtdev
Google组中,他们表示支持Java7。如果您使用Java6,那么一定要使用多捕获,否则您可能会捕获您不想捕获的异常。而且,如果人们应该使用instanceof,那么多个catch就不存在了。@commonware啊,谢谢。它目前位于v1.6上,但v1.7在下拉列表中作为选项提供。我目前使用的工作PC还没有1.7JDK,所以我会马上安装它。谢谢你的回答。如果你愿意,你可以给我一个我可以接受的答案,还是我自己给你一个?你的电话。multicatch只是一种语法糖吗?或者它需要JVM支持吗?@nmr:对不起,我不知道。我找不到一个简单的答案,但我测试了与2.2 AVD的兼容性,multicatch在那里工作得很好。(这对我来说已经足够好了)似乎表明它需要新的JVM操作码,但可能是用dx或其他方式处理的。啊,现在我发现,当我意识到神奇的无污染搜索词是“dalvik multicatch”;)@Commonware我对这个结论仍然有点困惑,我想在android 4.0+上使用它,我可以使用multicatch并尝试使用资源吗?@dirtydexter:我知道在android Studio上使用Java 7这样的功能有一个诀窍,尽管我不知道这些细节。