没有合适的资源?快使用搜索试试~ 我知道了~
深入浅出Android Support Annotation
需积分: 50 17 下载量 187 浏览量
2018-01-09
09:31:48
上传
评论
收藏 94KB DOCX 举报
温馨提示
试读
12页
如果你之前遇到过在方法参数前面有@NonNull的情况却不知道它是干什么的,这篇文章将解答你的疑问。
资源推荐
资源详情
资源评论
导读:如果你之前遇到过在方法参数前面有@NonNull 的情况却不知道它是干什么的,这
篇文章将解答你的疑问。*
原文如下:
在 Android Support Library19.1 版本中,Android 工具小组引入了几个很酷的注解类
型,供开发者在工程中使用。Support Library 自身也使用这些注解,这是一个好兆头。
就让我们好好研究下。*通过 gradle 可以很容易的把这些注解添加到我们的工程中:
compile 'com.android.support:support-annotations:20.0.0'
有三种类型的注解可供我们使用:
Nullness 注解;
资源类型注解;
IntDef 和 StringDef 注解;
我们将通过代码例子来讲解每一种类型的作用以及在工程中如何使用它们。
Nullness 注解
使用@NonNull 注解修饰的参数不能为 null。在下面的代码例子中,我们有一个取值为
null 的 name 变量,它被作为参数传递给 sayHello 函数,而该函数要求这个参数是非
null 的 String 类型:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String name = null;
sayHello(name);
}
void sayHello(@NonNull String s) {
Toast.makeText(this, "Hello " + s, Toast.LENGTH_LONG).show();
}
}
由于代码中参数 String s 使用@NonNull 注解修饰,因此 IDE 将会以警告的形式提醒我们
这个地方有问题:
如果我们给 name 赋值,例如 String name = “Our Lord Duarte”,那么警告将消失。
使用@Nullable 注解修饰的函数参数或者返回值可以为 null。假设 User 类有一个名为
name 的变量,使用*User.getName()访问,那么我们可以编写如下代码:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
User user = new User("Our Lord Duarte");
Toast.makeText(this, "Hello " + getName(user),
Toast.LENGTH_LONG).show();
}
@Nullable
String getName(@NonNull User user) {
return user.getName();
}
}
因为 getName 函数的返回值使用@Nullable 修饰,所以调用:
Toast.makeText(this, "Hello " + getName(user),
Toast.LENGTH_LONG).show();
没有检查 getName 的返回值是否为空,将可能导致 crash。
资源类型注解
是否曾经传递了错误的资源整型值给函数,还能够愉快的得到本来想要的整型值吗?资源
类型注解可以帮助我们准确实现这一点。在下面的代码中,我们的 sayHello 函数预期接
受一个字符串类型的 id,并使用@StringRes 注解修饰:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sayHello(R.style.AppTheme);
}
void sayHello(@StringRes int id) {
Toast.makeText(this, "Hello " + getString(id),
Toast.LENGTH_LONG).show();
}
}
而我们传递了一个样式资源 id 给它,这时 IDE 将提示警告如下:
类似的,我们把警告的地方使用一个字符串资源 id 代替警告就消失了:
sayHello(R.string.name);
剩余11页未读,继续阅读
资源评论
github_37203468
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功