开源项目

相关文章

更多

最近更新

更多

Guava Preconditions类-检查参数

2019-04-23 23:01|来源: 网路

Preconditions提供静态方法来检查方法或构造函数,被调用是否给定适当的参数。它检查的先决条件。其方法失败抛出IllegalArgumentException。

类声明

以下是com.google.common.base.Preconditions类的声明:

@GwtCompatiblepublic final class Preconditions
   extends Object

类方法

S.N. 方法及说明
1 static void checkArgument(boolean expression)
确保涉及的一个或多个参数来调用方法表达式的真相。
2 static void checkArgument(boolean expression, Object errorMessage)
确保涉及的一个或多个参数来调用方法表达式的真相。
3 static void checkArgument(boolean expression, String errorMessageTemplate, Object... errorMessageArgs)
确保涉及的一个或多个参数来调用方法表达式的真相。
4 static int checkElementIndex(int index, int size)
确保索引指定一个数组,列表或尺寸大小的字符串有效的元素。
5 static int checkElementIndex(int index, int size, String desc)
确保索引指定一个数组,列表或尺寸大小的字符串有效的元素。
6 static <T> T checkNotNull(T reference)
确保对象引用作为参数传递给调用方法不为空。
7 static <T> T checkNotNull(T reference, Object errorMessage)
确保对象引用作为参数传递给调用方法不为空。
8 static <T> T checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs)
确保对象引用作为参数传递给调用方法不为空。
9 static int checkPositionIndex(int index, int size)
确保索引指定一个数组,列表或尺寸大小的字符串的有效位置。
10 static int checkPositionIndex(int index, int size, String desc)
确保索引指定一个数组,列表或尺寸大小的字符串的有效位置。
11 static void checkPositionIndexes(int start, int end, int size)
确保开始和结束指定数组,列表或字符串大小有效的位置,并按照顺序。
12 static void checkState(boolean expression)
确保涉及调用实例的状态,但不涉及任何参数来调用方法表达式的真相。
13 static void checkState(boolean expression, Object errorMessage)
确保涉及调用实例的状态,但不涉及任何参数来调用方法表达式的真相。
14 static void checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs)
确保涉及调用实例的状态,但不涉及任何参数来调用方法表达式的真相。

继承的方法

这个类继承了以下类方法:

  • java.lang.Object

Preconditions 示例

使用所选择的编辑器,创建下面的java程序比如 C:/> Guava

GuavaTester.java

import com.google.common.base.Preconditions;
public class GuavaTester {

   public static void main(String args[]){
      GuavaTester guavaTester = new GuavaTester();
      try {
         System.out.println(guavaTester.sqrt(-3.0));
      }catch(IllegalArgumentException e){
         System.out.println(e.getMessage());
      }
      try {
         System.out.println(guavaTester.sum(null,3));
      }catch(NullPointerException e){
         System.out.println(e.getMessage());
      }
      try {
         System.out.println(guavaTester.getValue(6));
      }catch(IndexOutOfBoundsException e){
         System.out.println(e.getMessage());
      }
   }

   public double sqrt(double input) throws IllegalArgumentException {
      Preconditions.checkArgument(input > 0.0,
         "Illegal Argument passed: Negative value %s.", input);
      return Math.sqrt(input);
   }	

   public int sum(Integer a, Integer b){
      a = Preconditions.checkNotNull(a,
         "Illegal Argument passed: First parameter is Null.");
      b = Preconditions.checkNotNull(b,
         "Illegal Argument passed: Second parameter is Null.");
      return a+b;
   }

   public int getValue(int input){
      int[] data = {1,2,3,4,5};
      Preconditions.checkElementIndex(input,data.length,
         "Illegal Argument passed: Invalid index.");
      return 0;
   }}

验证结果

使用javac编译器编译如下类

C:\Guava>javac GuavaTester.java

现在运行GuavaTester看到的结果

C:\Guava>java GuavaTester

看到结果。

Illegal Argument passed: Negative value -3.0.
Illegal Argument passed: First parameter is Null.
Illegal Argument passed: Invalid index. (6) must be less than size (5)


相关问答

更多

为什么Guava不为小的ImmutableLists使用专门的类?(Why does Guava not use specialized classes for small ImmutableLists?)

你能帮我理解这里涉及的权衡吗? 这是一个权衡: 性能 - 不分配临时数组可以节省成本。 但是,人们需要进行一些广泛的代码分析和基准测试来量化这种节省。 (我怀疑在大多数应用程序中它都是微不足道的。请阅读@Voo提供的这个链接 !) 可读性 - 拥有一堆额外的重载会使javadoc混乱。 可维护性 - 有一堆重载是以不需要临时对象的方式实现的,这需要大量的复制/粘贴编程,这使得将来的代码维护更加困难。 实用程序 - 这些重载的使用频率是多少? 我希望答案“很少”。 字节码占用空间 - 这些额外的重载 ...

从重叠范围创建Guava ImmutableRangeSet(Create Guava ImmutableRangeSet from overlapping ranges)

你能更具体地了解你的用例吗? 我猜你有一系列范围,你正在尝试使用copyOf方法创建ImmutableRangeSet ,它会在重叠范围的情况下抛出IAE。 让我们看看这个测试用例: @Test public void shouldHandleOverlappingRanges() { //given ImmutableList<Range<Integer>> ranges = ImmutableList.of( Range.closed(0, 2), ...

通过ID与Guava Graph获取节点(Get a node by ID with Guava Graph)

如果你正在寻找一种索引你的图形节点的方式,可悲的是Guava没有内置这个功能。考虑使用CQEngine ,根据我的理解,你可以为任何集合(比如一组图形节点) 。 另外,如果您只是在寻找更高效的内存集合实现,则可以提供多种选项,包括但不限于Koloboke , fastutil和Eclipse Collections 。 If you're looking for a way to index your graph nodes, sadly Guava doesn't have this featu ...

是否有可能将Guava的ForwardingListIterator和PeekingIterator结合起来?(Is it possible to combine Guava's ForwardingListIterator with a PeekingIterator?)

将一个新的“窥视”概念引入到一个已经很容易在两个方向上滚动的迭代器的价值在哪里? 如果你真的想要它,你可以实现两个简单的静态助手: public static <T> T peekNext(ListIterator<T> iterator) { T next = iterator.next(); iterator.previous(); return next; } public static <T> T peekPrevious(ListIterator<T> iterator) ...

使用table guava for hashbasedTable(Using table guava for hashbasedTable)

番石榴贡献者在这里。 不要使用构造函数,请使用HashBasedTable.create()工厂方法。 (没有参数,或与expectedRows和expectedCellsPerRow 。) 使用table.put("A100", "B100", 5) ,就像使用两个键的Map一样。 Guava contributor here. Don't use the constructor, use the HashBasedTable.create() factory method. (With no ...

番石榴的IntervalTree(IntervalTree in Guava)

Guava没有提供这个,尽管你可以通过找到给定点之前和之后的第一个范围来在RangeSet之上构建这样的东西。 但一般来说,除了类型的比较排序之外,Guava Range对距离,度量或任何其他内容一无所知 。 他们不知道10比15更接近11 。 Guava doesn't provide this, though you might be able to build such a thing on top of a RangeSet by finding the first range befor ...

Guava ValueGraph的简单示例(Simple example of Guava ValueGraph)

Guava wiki提供了以下使用ValueGraph示例: MutableValueGraph<Integer, Double> weightedGraph = ValueGraphBuilder.directed().build(); weightedGraph.addNode(1); weightedGraph.putEdgeValue(2, 3, 1.5); // also adds nodes 2 and 3 if not already present weightedGraph.p ...

不兼容的库版本selenium / guava(Incompatible library version selenium / guava)

因为你对com.google.guava:guava:23.3 org.seleniumhq.selenium:selenium-java:3.0.1依赖性com.google.guava:guava:23.3使用org.seleniumhq.selenium:selenium-java:3.0.1可能会让你在十字路口。 但是Selenium发行说明清楚地提到了以下番石榴依赖性: Selenium v2.49.0 :Bump guava到19版 Selenium v3.1.0 :需要更新最新的番石 ...

使用guava AbstractScheduledService(Using guava AbstractScheduledService)

AbstractScheduledServiced实现Service 。 Service接口描述了生命周期方法,包括startAsync 。 ServiceState枚举文字包含有关其含义的文档。 处于NEW状态的服务(刚刚创建): 处于此状态的服务处于非活动状态。 它做的工作量极少,占用资源极少。 要使服务执行某些有用的操作,您必须将其转换为RUNNING状态 此状态下的服务正在运行。 这就是为什么你必须在它做任何事之前启动服务的原因。 我还建议不要从构造函数中调用startAsync,而是从创 ...

guava cache containsValue(guava cache containsValue)

是的,这可以比赛。 那么可以使用containsValue的结果进行任何操作; 但是如果它返回true,则在评估方法时某个点出现该值; 无论如何,这是你可能做的最好的。 就modCount而言,仅当值不存在时才使用,因为它用于检测地图是否被同时修改并且需要再次查看。 但是如果值在迭代期间的任何时间出现,那么该方法应该返回true,它会返回true。 Yes, this can race. So can any operation using the result of containsValue; ...