NullArgumentException.java

  1. /*
  2.  * Licensed to the Apache Software Foundation (ASF) under one or more
  3.  * contributor license agreements.  See the NOTICE file distributed with
  4.  * this work for additional information regarding copyright ownership.
  5.  * The ASF licenses this file to You under the Apache License, Version 2.0
  6.  * (the "License"); you may not use this file except in compliance with
  7.  * the License.  You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package org.apache.commons.math4.legacy.exception;

  18. import org.apache.commons.math4.legacy.exception.util.ExceptionContext;
  19. import org.apache.commons.math4.legacy.exception.util.ExceptionContextProvider;
  20. import org.apache.commons.math4.legacy.exception.util.Localizable;
  21. import org.apache.commons.math4.legacy.exception.util.LocalizedFormats;

  22. /**
  23.  * All conditions checks that fail due to a {@code null} argument must throw
  24.  * this exception.
  25.  * This class is meant to signal a precondition violation ("null is an illegal
  26.  * argument") and so does not extend the standard {@code NullPointerException}.
  27.  * Propagation of {@code NullPointerException} from within Commons-Math is
  28.  * construed to be a bug.
  29.  * <p>
  30.  * Note: from 4.0 onwards, this class extends {@link NullPointerException} instead
  31.  * of {@link MathIllegalArgumentException}.
  32.  *
  33.  * @since 2.2
  34.  */
  35. public class NullArgumentException extends NullPointerException
  36.     implements ExceptionContextProvider {

  37.     /** Serializable version Id. */
  38.     private static final long serialVersionUID = 20150225L;

  39.     /** Context. */
  40.     private final ExceptionContext context;

  41.     /**
  42.      * Default constructor.
  43.      */
  44.     public NullArgumentException() {
  45.         this(LocalizedFormats.NULL_NOT_ALLOWED);
  46.     }
  47.     /**
  48.      * @param pattern Message pattern providing the specific context of
  49.      * the error.
  50.      * @param arguments Values for replacing the placeholders in {@code pattern}.
  51.      */
  52.     public NullArgumentException(Localizable pattern,
  53.                                  Object... arguments) {
  54.         context = new ExceptionContext(this);
  55.         context.addMessage(pattern, arguments);
  56.     }

  57.     /**
  58.      * {@inheritDoc}
  59.      * @since 4.0
  60.      */
  61.     @Override
  62.     public ExceptionContext getContext() {
  63.         return context;
  64.     }

  65.     /** {@inheritDoc} */
  66.     @Override
  67.     public String getMessage() {
  68.         return context.getMessage();
  69.     }

  70.     /** {@inheritDoc} */
  71.     @Override
  72.     public String getLocalizedMessage() {
  73.         return context.getLocalizedMessage();
  74.     }

  75.     /**
  76.      * Checks that an object is not null.
  77.      *
  78.      * @param o Object to be checked.
  79.      * @param pattern Message pattern.
  80.      * @param args Arguments to replace the placeholders in {@code pattern}.
  81.      * @throws NullArgumentException if {@code o} is {@code null}.
  82.      */
  83.     public static void check(Object o,
  84.                              Localizable pattern,
  85.                              Object... args) {
  86.         if (o == null) {
  87.             throw new NullArgumentException(pattern, args);
  88.         }
  89.     }

  90.     /**
  91.      * Checks that an object is not null.
  92.      *
  93.      * @param o Object to be checked.
  94.      * @throws NullArgumentException if {@code o} is {@code null}.
  95.      */
  96.     public static void check(Object o) {
  97.         if (o == null) {
  98.             throw new NullArgumentException();
  99.         }
  100.     }
  101. }