View Javadoc

1   /*
2    *  Copyright 2009-2013 Stephen Colebourne
3    *
4    *  Licensed under the Apache License, Version 2.0 (the "License");
5    *  you may not use this file except in compliance with the License.
6    *  You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *  Unless required by applicable law or agreed to in writing, software
11   *  distributed under the License is distributed on an "AS IS" BASIS,
12   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *  See the License for the specific language governing permissions and
14   *  limitations under the License.
15   */
16  package org.joda.money;
17  
18  /**
19   * Provides a uniform interface to obtain a {@code BigMoney}.
20   * <p>
21   * When designing APIs, it is recommended to use {@code BigMoneyProvider}
22   * in method signatures where possible to allow the widest possible use of the method.
23   * Within Joda-Money, both {@code BigMoney} and {@code Money} implement
24   * the provider interface.
25   * <p>
26   * Implementations of {@code BigMoneyProvider} may be mutable.
27   * To minimise the risk of the value of the provider changing while processing,
28   * any method that takes a {@code BigMoneyProvider} as a parameter should convert
29   * it to a {@code BigMoney} immediately and use that directly from then on.
30   * The method {@link BigMoney#of(BigMoneyProvider)} performs the conversion
31   * safely with null checks and is recommended for this purpose.
32   * <p>
33   * This interface makes no guarantees about the immutability or
34   * thread-safety of implementations.
35   */
36  public interface BigMoneyProvider {
37  
38      /**
39       * Returns a {@code BigMoney} instance equivalent to the value of this object.
40       * <p>
41       * It is recommended that {@link BigMoney#of(BigMoneyProvider)} is used in
42       * preference to calling this method directly. It is also recommended that the
43       * converted {@code BigMoney} is cached in a local variable instead of
44       * performing the conversion multiple times.
45       * 
46       * @return the converted money instance, never null
47       * @throws RuntimeException if conversion is not possible
48       */
49      BigMoney toBigMoney();
50  
51  }