Guava Preconditions类使用【Guava学习笔记】

package com.lwl.guava.Preconditions;

import com.google.common.base.Preconditions;

public class UserPreconditions {

	/**
	 * Preconditions提供静态方法来检查方法或构造函数,被调用是否给定适当的参数。
	 * 它检查的先决条件。其方法失败抛出IllegalArgumentException。
	 * @param args
	 * @author 
	 * @create 2017-8-18 下午4:44:46
	 */
	public static void main(String[] args) {

		//检查boolean是否为true,用来检查传递给方法的参数。
//		testCheckArgument();
		
		//检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull。
//		testCheckNotNull();
		
		//用来检查对象的某些状态。
//		testCheckState();
		
		//确保索引指定一个数组,列表或尺寸大小的字符串有效的元素。
//		testCheckElementIndex();
		
		//确保索引指定一个数组,列表或尺寸大小的字符串有效的元素。
//		textCheckPositionIndex();
		
		//确保开始和结束指定数组,列表或字符串大小有效的位置,并按照顺序
//		testCheckPositionIndexes();
		
	}

	
	
	/**
	 * 确保开始和结束指定数组,列表或字符串大小有效的位置,并按照顺序
	 * @create 2017-8-18 下午5:26:23
	 */
	private static void testCheckPositionIndexes() {
		/**
		 * 确保开始和结束指定数组,列表或字符串大小有效的位置,并按照顺序
		 * 这个方法只要表达的意思是
		 * start作为开始位置
		 * end作为结束位置
		 * size作为数组或者列表或者字符串的长度
		 * 
		 * 开始的位置 (start) <= 结束的位置(end) <= 总长度(size)
		 * 如果有一个不满足则抛出异常:IndexOutOfBoundsException
		 */
//		Preconditions.checkPositionIndexes(start, end, size)
	}




	/**
	 * 确保索引指定一个数组,列表或尺寸大小的字符串有效的元素。
	 * 异常信息:IndexOutOfBoundsException
	 * @create 2017-8-18 下午5:17:27
	 */
	private static void textCheckPositionIndex() {

		String array = "aaa";
		int index = 5;
		
		try {
//			Preconditions.checkElementIndex(index,array.length);
			int result = Preconditions.checkElementIndex(index,array.length(),"大于数组的长度啦");
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		/**
		 * Exception in thread "main" java.lang.IndexOutOfBoundsException: 大于数组的长度啦 (5) must be less than size (3)
				at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:310)
				at com.lwl.guava.Preconditions.UserPreconditions.testCheckElementIndex(UserPreconditions.java:35)
				at com.lwl.guava.Preconditions.UserPreconditions.main(UserPreconditions.java:25)
		 */
	}
	
	/**
	 * 确保索引指定一个数组,列表或尺寸大小的字符串有效的元素。
	 * 异常信息:IndexOutOfBoundsException
	 * @create 2017-8-18 下午5:17:27
	 */
	private static void testCheckElementIndex() {
		
		int[] array = {1,2,3};
		int index = 2;
		
		try {
//			Preconditions.checkElementIndex(index,array.length);
			int result = Preconditions.checkElementIndex(index,array.length,"大于数组的长度啦");
			System.out.println(result);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		/**
		 * Exception in thread "main" java.lang.IndexOutOfBoundsException: 大于数组的长度啦 (5) must be less than size (3)
				at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:310)
				at com.lwl.guava.Preconditions.UserPreconditions.testCheckElementIndex(UserPreconditions.java:35)
				at com.lwl.guava.Preconditions.UserPreconditions.main(UserPreconditions.java:25)
		 */
	}




	/**
	 * 
	 * 用来检查对象的某些状态。
	 * 确保涉及调用实例的状态,但不涉及任何参数来调用方法表达式的真相。
	 * 检查失败时抛出的异常:IllegalStateException
	 * @create 2017-8-18 下午5:07:46
	 */
	private static void testCheckState() {
		//checkState(boolean expression)
//		Preconditions.checkState(2 > 5);
		//checkState(boolean expression, String errorMessageTemplate)
//		Preconditions.checkState(2 > 5,"2不可能大于5");
		try {
			//checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs)
			Preconditions.checkState(2 > 5,"2不可能大于5",1,2,3,4);
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		/**
		 * 错误信息:
		 * java.lang.IllegalStateException: 2不可能大于5 [1, 2, 3, 4]
				at com.google.common.base.Preconditions.checkState(Preconditions.java:199)
				at com.lwl.guava.Preconditions.UserPreconditions.testCheckState(UserPreconditions.java:40)
				at com.lwl.guava.Preconditions.UserPreconditions.main(UserPreconditions.java:23)
			2不可能大于5 [1, 2, 3, 4]
		 */
		
	}





	/**
	 * 检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull。
	 * 检查失败时抛出的异常:NullPointerException
	 * @create 2017-8-18 下午5:00:27
	 */
	private static void testCheckNotNull() {

		Integer first = null;
		//确保对象引用作为参数传递给调用方法不为空。
//		Integer result1 = Preconditions.checkNotNull(first);
		//确保对象引用作为参数传递给调用方法不为空。
//		Integer result2 = Preconditions.checkNotNull(first,"是空值哦");
		//checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs)
		//第三个参数是可变参数
		Integer result3 = Preconditions.checkNotNull(first,"是空值哦",12,123,123);
		System.out.println(result3);
		/**
		 * 异常显示
		 * Exception in thread "main" java.lang.NullPointerException: 是空值哦 [12, 123, 123]
				at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:251)
				at com.lwl.guava.Preconditions.UserPreconditions.testCheckNotNull(UserPreconditions.java:39)
				at com.lwl.guava.Preconditions.UserPreconditions.main(UserPreconditions.java:18)
		 */
	}



	/**
	 * 检查boolean是否为true,用来检查传递给方法的参数。
	 * 检查失败时抛出的异常:IllegalArgumentException
	 * @create 2017-8-18 下午4:56:28
	 */
	public static void testCheckArgument(){
		//没有额外参数:抛出的异常中没有错误消息;
		try {
			Preconditions.checkArgument(5 > 10);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		//确保涉及的一个或多个参数来调用方法表达式的真相。checkArgument(boolean expression, Object errorMessage)
		try {
			Preconditions.checkArgument(5 > 10,"5肯定小于10 啦");
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		//确保涉及的一个或多个参数来调用方法表达式的真相。 checkArgument(boolean expression, 
		//				String errorMessageTemplate, Object... errorMessageArgs)
		try {
			Preconditions.checkArgument(5 > 10,"5肯定小于10 啦",4,32,423);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
	}
	/**
	 * 异常信息:
	 * java.lang.IllegalArgumentException: 5肯定小于10 啦 [4, 32, 423]
		at com.google.common.base.Preconditions.checkArgument(Preconditions.java:146)
		at com.lwl.guava.Preconditions.UserPreconditions.testCheckArgument(UserPreconditions.java:77)
		at com.lwl.guava.Preconditions.UserPreconditions.main(UserPreconditions.java:16)
	 */
}


再把Preconditions类图的方法截图贴一下:

Guava Preconditions类使用【Guava学习笔记】_第1张图片


你可能感兴趣的:(Guava Preconditions类使用【Guava学习笔记】)