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 18 package org.apache.commons.math3.fraction; 19 20 import java.io.Serializable; 21 22 import org.apache.commons.math3.Field; 23 import org.apache.commons.math3.FieldElement; 24 25 /** 26 * Representation of the fractional numbers without any overflow field. 27 * <p> 28 * This class is a singleton. 29 * </p> 30 * @see Fraction 31 * @since 2.0 32 */ 33 public class BigFractionField implements Field<BigFraction>, Serializable { 34 35 /** Serializable version identifier */ 36 private static final long serialVersionUID = -1699294557189741703L; 37 38 /** Private constructor for the singleton. 39 */ BigFractionField()40 private BigFractionField() { 41 } 42 43 /** Get the unique instance. 44 * @return the unique instance 45 */ getInstance()46 public static BigFractionField getInstance() { 47 return LazyHolder.INSTANCE; 48 } 49 50 /** {@inheritDoc} */ getOne()51 public BigFraction getOne() { 52 return BigFraction.ONE; 53 } 54 55 /** {@inheritDoc} */ getZero()56 public BigFraction getZero() { 57 return BigFraction.ZERO; 58 } 59 60 /** {@inheritDoc} */ getRuntimeClass()61 public Class<? extends FieldElement<BigFraction>> getRuntimeClass() { 62 return BigFraction.class; 63 } 64 // CHECKSTYLE: stop HideUtilityClassConstructor 65 /** Holder for the instance. 66 * <p>We use here the Initialization On Demand Holder Idiom.</p> 67 */ 68 private static class LazyHolder { 69 /** Cached field instance. */ 70 private static final BigFractionField INSTANCE = new BigFractionField(); 71 } 72 // CHECKSTYLE: resume HideUtilityClassConstructor 73 74 /** Handle deserialization of the singleton. 75 * @return the singleton instance 76 */ readResolve()77 private Object readResolve() { 78 // return the singleton instance 79 return LazyHolder.INSTANCE; 80 } 81 82 } 83