1 package org.apidesign.apifest08.currency;
3 import java.io.Serializable;
4 import java.math.BigDecimal;
5 import java.util.Currency;
8 * Default implementation of {@link Money} interface. This class is immutable.
12 public final class MoneyImpl implements Serializable, Money{
13 private static final long serialVersionUID = -6091808475616516136L;
15 private final BigDecimal amount;
17 private final Currency currency;
19 public MoneyImpl(BigDecimal amount, Currency currency) {
20 if (amount==null) throw new NullPointerException("Amount is null");
21 if (currency==null) throw new NullPointerException("Currency is null"+currency);
23 this.currency = currency;
28 public MoneyImpl(long amount, Currency currency) {
29 this(BigDecimal.valueOf(amount), currency);
32 public MoneyImpl(double amount, Currency currency) {
33 this(BigDecimal.valueOf(amount), currency);
42 public static final Money money(BigDecimal amount, Currency currency)
44 return new MoneyImpl(amount, currency);
52 public static final Money money(long amount, Currency currency)
54 return new MoneyImpl(amount, currency);
62 public static final Money money(double amount, Currency currency)
64 return new MoneyImpl(amount, currency);
71 public BigDecimal getAmount() {
78 public Currency getCurrency() {
83 public int hashCode() {
86 result = prime * result + ((amount == null) ? 0 : amount.hashCode());
87 result = prime * result
88 + ((currency == null) ? 0 : currency.hashCode());
93 public boolean equals(Object obj) {
98 if (!(obj instanceof MoneyImpl))
100 MoneyImpl other = (MoneyImpl) obj;
101 if (amount == null) {
102 if (other.amount != null)
104 } else if (amount.compareTo(other.amount)!=0)
106 if (currency == null) {
107 if (other.currency != null)
109 } else if (!currency.equals(other.currency))
115 public String toString() {
116 return getClass().getName()+"["+currency+amount+"]";