- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
<分区>
以下代码 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)
产生警告
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 指针的场景吗?
java.lang.Throwable 的哪些子类可能被空语句抛出? 通过短语“空语句”,我指的是“无”、“分号”和“分号”: // .... A(); B(); C(); try { //
我是一名优秀的程序员,十分优秀!