Android开发中Preconditions前置条件判断
在日常开发中,经常会遇到要对输入参数进行核验的情况,比如是否为空,参数的取值范围是否符合要求等等。单独进行校验的话,代码的重复率就很高了。这时我们可以用Preconditions类来统一校验参数,同时可以选择抛出对应的异常信息,让代码看起来更明了。
Preconditions类中提供了若干前置条件判断的静态方法,每个方法都有三种方式:
- 没有额外参数:抛出的异常中没有错误消息;
- 用一Object对象作为error message参数:使用Object.toString() 抛出异常错误消息;
- 用字符串作为替换带有占位符的error message参数,类似于printf,但考虑GWT的兼容性和效率,只支持%s指示符。
例如
checkArgument(i >= 0, “Argument was %s but expected nonnegative”, i);
checkArgument(i < j, “Expected i < j, but %s > %s”, i, j);
方法:
checkNotNull、checkArgument和checkState有大量的重载,它们采用可变参数方式。
checkArgument(boolean)
检查boolean是否为true,用来检查传递给方法的参数。失败IllegalArgumentException
// Without an Error Message
public void test() {
int age = -7;
Preconditions.checkArgument(age > 0);
}
// With an Error Message
public void test() {
int age = -7;
String message = “Age can’t be zero or less than zero.”;
Preconditions.checkArgument(age > 0, message);
}
// With a Template Error Message
public void test() {
int age = -7;
String message = “Age should be positive number, you supplied %s.”;
Preconditions.checkArgument(age > 0, message, age);
}
checkNotNull(T)
检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull。失败NullPointerException
public void test() {
String nullObject = null;
String message = “Please check the Object supplied, its null!”;
Preconditions.checkNotNull(nullObject, message);
}
public void test() {
String nullObject = null;
String message = “Please check the Object supplied, its %s!”;
Preconditions.checkNotNull(nullObject, message,new Object[] { null });
}
checkState(boolean)
检查对象的一些状态,不依赖方法参数。例如,Iterator可以用来next是否在remove之前被调用。
用来检查对象的某些状态。失败IllegalStateException
public void test() {
int[] validStates = { -1, 0, 1 };
int givenState = 9;
String message = “You have entered an invalid state”;
Preconditions.checkState(Arrays.binarySearch(validStates, givenState) > 0, message);
}
以下方法无需直接传入list, string或array, 只需传入大小。
checkElementIndex(int index, int size)
检查index作为索引值对某个列表、字符串或数组是否有效。index>=0 && index< size,返回index。
失败IndexOutOfBoundsException,数组越界的时候需要这个
public void test() {
int[] numbers = { 1, 2, 3, 4, 5 };
String message = “Please check the bound of an array and retry”;
Preconditions.checkElementIndex(6, numbers.length - 1, message);
}
checkPositionIndex(int index, int size)
检查index作为位置值对某个列表、字符串或数组是否有效。index>=0 && index<=size。返回index。
失败 IndexOutOfBoundsException
public void test() {
int[] numbers = { 1, 2, 3, 4, 5 };
String message = “Please check the bound of an array and retry”;
Preconditions.checkPositionIndex(6, numbers.length - 1, message);
}
checkPositionIndexes(int start, int end, int size)、
检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效,失败IndexOutOfBoundsException
public void test() {
int start = 1;
int end = 6;
int[] numbers = { 1, 2, 3, 4, 5 };
Preconditions.checkPositionIndexes(start, end, numbers.length);
}
总结一下
Preconditions类的方法非常简单明了。比如checkNotNull清楚地描述做了什么,会抛出什么异常;并且直接返回检查的参数,让你可以在构造函数中保持字段的单行赋值风格:this.field = checkNotNull(field)。
索引值常用来查找列表、字符串或数组中的元素,如List.get(int), String.charAt(int)
位置值和位置范围常用来截取列表、字符串或数组,如List.subList(int,int), String.substring(int)
简单、可自定义参数的异常信息。
Android开发中Preconditions前置条件判断相关推荐
- android 判断安装微信,Android开发中判断手机是否安装了QQ或者微信
下面一段代码给大家分享了android中判断手机是否安装了qq或者微信,代码简单易懂,非常不错,具有参考借鉴价值,需要的的朋友参考下吧 public static boolean isWeixinAv ...
- Android开发中常见的设计模式
对于开发人员来说,设计模式有时候就是一道坎,但是设计模式又非常有用,过了这道坎,它可以让你水平提高一个档次.而在android开发中,必要的了解一些设计模式又是非常有必要的.对于想系统的学习设计模式的 ...
- android listview下拉动画效果,Android开发中利用ListView实现一个渐变式的下拉刷新动画...
Android开发中利用ListView实现一个渐变式的下拉刷新动画 发布时间:2020-11-23 16:50:31 来源:亿速云 阅读:80 作者:Leah 本篇文章给大家分享的是有关Androi ...
- android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
前言 之前在做一个Viewpager上面加载多个Fragment时总会实例化已经创建好的Fragmnet对象类似 viewPager.setAdapter(new FragmentPagerAdapt ...
- android开发分页查询,Android开发中实现分页效果的简单步骤
分页加载在程序开发中是必备的,但是我们实现这个功能并不仅仅为了美观,用户体验也是很重要的,爱站技术频道下面就带大家了解Android开发中实现分页效果的简单步骤,感兴趣的小伙伴们参考看看吧! 具体内容 ...
- android动态添加圆,Android开发中TextView 实现右上角跟随文本动态追加圆形红点
在一个比较坑的需求里,一段文字右上角需要追加一个圆形红点.最右侧有个金额,红点动态随着文字移动,然后各种摆布局,一下午坑死我了.后来果断放弃.然后就想试试直接自定义view来实现这个需求. 最坑的就是 ...
- android 最新 九宫格,Android开发中怎么显示一个九宫格图片
Android开发中怎么显示一个九宫格图片 发布时间:2020-11-21 15:09:33 来源:亿速云 阅读:86 作者:Leah 本篇文章给大家分享的是有关Android开发中怎么显示一个九宫格 ...
- Android开发中虚拟位置定位、应用双开、IP代理检测
Android开发中虚拟位置定位.应用双开.IP代理检测 1.虚拟位置定位.应用双开原理 目前市面上的多开App的原理类似,都是以新进程运行被多开的App,并hook各类系统函数,使被多开的App认为 ...
- Android开发中VSS、RSS、PSS、USS的区别
Android开发中VSS.RSS.PSS.USS的区别 1. VSS: Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) VSS表示一个进程可访问的全部内存地址空间的大小.这个 ...
最新文章
- 浏览器解析JavaScript原理
- SAP HANA CLOUD和aws一个实际项目中的性能比较
- 二、数据预处理——缺失值处理
- c语言中二分法100中找30,c语言中的二分法
- 【后台任务】将工作请求发送到后台服务(11)
- C++ STL容器vector篇(二) vector容器的构造函数与赋值操作
- 【操作系统】—处理机调度的概念以及层次
- 简单的光线追踪教程(一)
- Windows下QT5.9构建的debug或release文件打包后不能使用
- vue 项目 创建表格
- Android studio更换主题、背景图片
- Ajax——AJAX实现省市联动
- glove.840B.300d glove词向量词嵌入文件国内服务器下载 出现麻烦阻塞的点时,就要思考google有没有更快捷的方法
- python实现情人节的爱意表达
- 第11届极客大挑战writeup
- 春节祝福短信怎么发?付详细文案
- 多智能体强化学习-DGN
- 七牛前端使用JS-SDK上传文件完成时返回code:400报错
- navigation 的代价地图
- 我该如何锁住你?--云端数据加密方法深入对比