NumericGene.java
001 /*
002  * Java Genetic Algorithm Library (jenetics-8.0.0).
003  * Copyright (c) 2007-2024 Franz Wilhelmstötter
004  *
005  * Licensed under the Apache License, Version 2.0 (the "License");
006  * you may not use this file except in compliance with the License.
007  * You may obtain a copy of the License at
008  *
009  *      http://www.apache.org/licenses/LICENSE-2.0
010  *
011  * Unless required by applicable law or agreed to in writing, software
012  * distributed under the License is distributed on an "AS IS" BASIS,
013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014  * See the License for the specific language governing permissions and
015  * limitations under the License.
016  *
017  * Author:
018  *    Franz Wilhelmstötter (franz.wilhelmstoetter@gmail.com)
019  */
020 package io.jenetics;
021 
022 /**
023  * Base interface for numeric genes.
024  *
025  * @implSpec
026  <em>Jenetics</em> requires that the individuals ({@link Genotype} and
027  {@link Phenotype}) are not changed after they have been created. Therefore,
028  * all implementations of the {@code NumericGene} interface must also be
029  <em>immutable</em>.
030  *
031  @see NumericChromosome
032  *
033  @author <a href="mailto:franz.wilhelmstoetter@gmail.com">Franz Wilhelmstötter</a>
034  @since 1.6
035  @version 3.0
036  */
037 public interface NumericGene<
038     extends Number & Comparable<? super N>,
039     extends NumericGene<N, G>
040 >
041     extends BoundedGene<N, G>
042 {
043 
044     /**
045      * Returns the value of the specified gene as a byte. This may involve
046      * rounding or truncation.
047      *
048      @return the numeric value represented by this object after conversion to
049      *         type {@code byte}.
050      */
051     default byte byteValue() {
052         return allele().byteValue();
053     }
054 
055     /**
056      * Returns the value of the specified gene as a short. This may involve
057      * rounding or truncation.
058      *
059      @return the numeric value represented by this object after conversion to
060      *         type {@code short}.
061      */
062     default short shortValue() {
063         return allele().shortValue();
064     }
065 
066     /**
067      * Returns the value of the specified gene as an int. This may involve
068      * rounding or truncation.
069      *
070      @return the numeric value represented by this object after conversion to
071      *         type {@code int}.
072      */
073     default int intValue() {
074         return allele().intValue();
075     }
076 
077     /**
078      * Returns the value of the specified gene as a long. This may involve
079      * rounding or truncation.
080      *
081      @return the numeric value represented by this object after conversion to
082      *         type {@code long}.
083      */
084     default long longValue() {
085         return allele().longValue();
086     }
087 
088     /**
089      * Returns the value of the specified gene as a float. This may involve
090      * rounding or truncation.
091      *
092      @return the numeric value represented by this object after conversion to
093      *         type {@code float}.
094      */
095     default float floatValue() {
096         return allele().floatValue();
097     }
098 
099     /**
100      * Returns the value of the specified gene as a double. This may involve
101      * rounding or truncation.
102      *
103      @return the numeric value represented by this object after conversion to
104      *         type {@code double}.
105      */
106     default double doubleValue() {
107         return allele().doubleValue();
108     }
109 
110     @Override
111     G newInstance(final Number number);
112 
113 }