android 当我确信一个异常永远不会被抛出时,我如何删除try-catch块?

628mspwn  于 2023-04-28  发布在  Android
关注(0)|答案(3)|浏览(104)

try-catch块会在代码中添加不必要的行,使代码看起来很混乱。由于值总是存在的,所以没有必要包含try-catch块。使用JsonObject而不需要使用try-catch或throws方法处理异常的推荐方法是什么?

以下是我目前拥有的:

try {
    textViewOfcountryName.setText(new JSONObject("{\"EN\": \"Spain\", \"ES\": \"España\"}").getString(getString(R.string.iso_639)));
} catch (JSONException e) {
    throw new RuntimeException(e);
}

以下是我正在寻找的:

textViewOfcountryName.setText(new JSONObject("{\"EN\": \"Spain\", \"ES\": \"España\"}").getString(getString(R.string.iso_639)));
zwghvu4y

zwghvu4y1#

在Java中,如果你调用一个抛出检查异常的方法,比如JSONException,那么你需要使用try-catch块来处理异常,或者使用throws关键字来声明要抛出的异常。
所以我认为避免try/catch块的唯一方法是将方法标记为抛出JSONException

vhmi4jdf

vhmi4jdf2#

如果你使用的是lombok,你可以用@SneakyThrows注解你的方法:

@SneakyThrows
void myMethod() {
    // ...
    textViewOfcountryName.setText(new JSONObject("{\"EN\": \"Spain\", \"ES\": \"España\"}").getString(getString(R.string.iso_639)));
    // ...
}

或者,您可以创建一个实用函数,该函数接受一个抛出Exception的 Runnable 函数,执行它,并捕获和重新抛出异常作为 * RuntimeException *:

public interface RunnableThrowingException<T extends Exception> {
    void run() throws T;
}

public static void sneaky(RunnableThrowingException<?> runnableThrowing) {
    try {
        runnableThrowing.run();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

你可以在任何你需要的地方重复使用它,就像这样:

void myMethod() {
    // ...
    sneaky(() -> textViewOfcountryName.setText(new JSONObject("{\"EN\": \"Spain\", \"ES\": \"España\"}").getString(getString(R.string.iso_639))))
    // ...
}

如果你不想自己定义它,你可以使用像vavr或类似的库:https://www.baeldung.com/exceptions-using-vavr

eiee3dmh

eiee3dmh3#

如果您真的想避免Try Catch,可以使用JSONObject中的optString函数。
getString抛出一个异常,所以你要么自己抛出它,要么把它放在一个try catch中
optString也有类似的功能,但是如果没有找到字符串,它会返回一个默认的String,并且不会抛出异常。
因此您可以有效地将代码替换为

textViewOfcountryName.setText(new JSONObject(new HashMap<String, String>() {{ put("EN", "Spain"); put("ES", "España"); }}).optString(getString(R.string.iso_639)), "");

链接到optString的文档:https://javadoc.io/static/org.json/json/20230227/org/json/JSONObject.html#optString-java.lang.String-

相关问题