我想知道Java中是否有办法跳过'跳过'我知道抛出函数的try-catch方法不会引发异常。
我有这段代码:
#pragma strict
// random url link from google
// and DXT compress them at runtime
var url = "https://i.ytimg.com/vi/yaqe1qesQ8c/maxresdefault.jpg";
function Start () {
// Create a texture in DXT1 format
GetComponent.<Renderer>().material.mainTexture = new Texture2D(4, 4, TextureFormat.DXT1, false);
while(true) {
// Start a download of the given URL
var www = new WWW(url);
// wait until the download is done
yield www;
var Texture_1: Texture2D;
Texture_1 = Resources.Load("glass");
// assign the downloaded image to the main texture of the object
www.LoadImageIntoTexture(Texture_1);
}
}
我收到编译错误,说明未处理异常
错误:(97,30)错误:未报告的异常ParseException;必须被抓住或宣布被抛出
我可以通过将DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = format.parse(dateString); // <-- Compiler error here
Log.i(PF.TAG, date.toString());
置于try-catch中来消除此错误。
在Swift 2错误处理中,有一个选项可以执行format.parse()
,它将编译并执行throwable函数,并在出现错误时崩溃。
在Java中是否有类似的方式,所以我不必把我知道的所有小任务放在一个try-catch的地方不会抛出异常?
答案 0 :(得分:1)
不是真的,但你可以编写一个帮助器方法来欺骗编译器,使其相信未检查已检查的异常。例如:
public static <T> T uncheck(Callable<T> callable) {
try {
return callable.call();
} catch (Throwable t) {
return rethrow(t);
}
}
@SuppressWarnings("unchecked")
private static <E extends Throwable, T> T rethrow(Throwable t) throws E {
throw (E) t;
}
你会像这样使用它:
Date date = uncheck(() -> format.parse(dateString));
您还可以将已检查的异常包装到未经检查的异常中,例如jOOL执行here。
答案 1 :(得分:0)
不是。
在Java中,通常有两种类型的异常 - checked(扩展异常)或unchecked(扩展RuntimeException)。
以某种方式处理已检查的异常是强制性的,不这样做会导致编译时异常,就像您的情况一样。有两种处理方式:
throws
声明。它是方法声明的一部分,并将处理异常的责任转移到声明方法的客户端。如果你想模仿你提到的Swift构造,你需要的是这样的东西:
try {
someFunction()
} catch (Exception e) {
throw new <some runtime exception>
}
通过这种方式,你可以吞下&#34;已检查的异常,停止它的传播,而是抛出一个未经检查的运行时异常,它不会强制调用者处理它,如果发生原始异常,将导致崩溃。
答案 2 :(得分:0)
您可以避免在某些时候处理该异常,因为它已经过检查,但如果您重构调用,可以避免需要大量的try-catch构造处理异常的单独方法:
public class DateUtils {
private DateUtils() { throw new AssertionError(); }
public static Date parse(String toParse, DateFormat format) {
try {
return format.parse(toParse);
catch (ParseException e) {
// Exception handling code here. Maybe you want to log the error
// somewhere? Then either re-throw as a RuntimeException or return some
// default value.
}
}
}
然后你做:
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = DateUtils.parse(dateString, format);
Log.i(PF.TAG, date.toString());