处理 android 中空值的更好方法?

Better way to handle null values in android?

每当我需要从 android 中的另一个 activity/intent 等获取一些数据时,我的代码基本上必须遵循以下逻辑:

Intent intent = getIntent();

if (intent != null) {
    String intentAction = intent.getAction();

    if (intentAction != null && intentAction.equals("whatever")) {

    // Do some stuff now that we know there are now  null values
    }
}

在我看来,代码非常冗长且嵌套非常多,每次我这样做时我都会想自己 "there's gotta be a better way"。

Is there and what would that be?

一个不好的做法,但更短(而且没有):

try {
  switch (getIntent().getAction()) {
       case "whatever": ...
            ...
         }
} catch e {}

您可以将 if-statements 合二为一。您不会收到错误,因为代码将 'exit' 一旦 && returns false.

之前的第一个参数
Intent intent = getIntent();

if (intent != null && intent.getAction() != null && intent.getAction().equals("whatever") {

    // Do some stuff now that we know there are now  null values

}

或者这里有一个更短的方法,感谢@Tomkarho 的建议。

Intent intent = getIntent();

if (intent != null && "whatever".equals(intent.getAction()) {

    // Do some stuff now that we know there are now  null values

}

我个人只会创建一些辅助方法来清理主要逻辑。如果这是经常出现的代码,您可以创建一个基础 Activity class 来保存 getIntentAction 方法,或者在一个采用 Activity 或其 Intent 作为参数。

对于字符串比较,可以使用TextUtils.equals()。或者,如果您有一个包含操作名称的字符串,则可以将其用作 equals 方法的左侧。请确保以后不要调换订单。

一些示例代码:

public static final String WhateverAction = "whatever";

public String getIntentAction()
{
    Intent intent = getIntent();
    return intent == null ? null : intent.getAction();
}

在左侧使用比较字符串:

public void processMyIntent()
{
    String action = getIntentAction();
    if(WhateverAction.equals(action))
    {
        // do something
    }
    else if("thisAlsoWorksAction".equals(action)
    {
        // do something else
    }
    else
    {
        // got null or unexpected value
    }
}

使用TextUtils

public void processMyIntentTextUtils()
{
    String action = getIntentAction();
    if(TextUtils.equals(action, WhateverAction))
    {
        // do something
    }
    if(TextUtils.equals(action, "anotherAction"))
    {
        // do something else
    }
    else
    {
        // got null or unexpected value
    }
}

使用开关:

public void processMyIntentSwitch()
{
    String action = getIntentAction();
    switch(action)
    {
        case WhateverAction:
           //...
           break;

        default:
           // got null or unexpected value
    }
}

你也可以不用 getIntentAction 方法,只需执行以下一行,尽管它有点罗嗦:

String intentAction = getIntent() != null ? getIntent().getAction() : null;