gpt4 book ai didi

java - 取消引用可能会产生 'java.lang.NullPointerException'

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:00 24 4
gpt4 key购买 nike

<分区>

以下代码 fragment 会在 Android Studio 中产生 lint 警告。

    Bundle extras = getIntent().getExtras();
if (extras != null && extras.getString(REDIRECT_KEY) != null) {
switch (extras.getString(REDIRECT_KEY)) { ...

extras.getString(REDIRECT_KEY) 产生警告

enter image description here

Dereference of 'extras.getString(REDIRECT_KEY)' may produce 'java.lang.NullPointerException'

但我没有看到任何可能发生这种情况的情况。这是 lint 检查中的错误,它根本无法识别我之前在 if 中的空检查吗?还是我错过了什么?

编辑:将代码更改为以下,确实删除了警告

if(getIntent() != null && getIntent().getStringExtra(REDIRECT_KEY) != null){
switch (getIntent().getStringExtra(REDIRECT_KEY)){
...
}
}

但这只是因为这种方式而消失了,这个 lint 检查有效(至少我猜)。如果我向这张支票显示更多信息,它会在某一时刻说

Variables, method parameters and return values marked as @Nullable or @NotNull are treated as nullable (or not-null, respectively) and used during the analysis to check nullability contracts

查看Bundle和Intent的源码显示:

/**
* Retrieve extended data from the intent.
*
* @param name The name of the desired item.
*
* @return the value of an item that previously added with putExtra()
* or null if no String value was found.
*
* @see #putExtra(String, String)
*/
public String getStringExtra(String name) {
return mExtras == null ? null : mExtras.getString(name);
}

和BaseBundle

/**
* Returns the value associated with the given key, or null if
* no mapping of the desired type exists for the given key or a null
* value is explicitly associated with the key.
*
* @param key a String, or null
* @return a String value, or null
*/
@Nullable
public String getString(@Nullable String key) {
unparcel();
final Object o = mMap.get(key);
try {
return (String) o;
} catch (ClassCastException e) {
typeWarning(key, o, "String", e);
return null;
}
}

如您所见,BaseBundle 将其返回值设置为@Nullable,而 Intent 则没有。所以使用 getStringExtra 只能消除症状,而不是原因。我仍然猜测这是由于 lint 检查不充分造成的,而不是我这边的错误编码。或者还有人看到可以抛出 Null 指针的场景吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com