All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.venky.core.math.AnyNumber Maven / Gradle / Ivy

The newest version!
package com.venky.core.math;

import java.lang.reflect.ParameterizedType;
import java.util.Objects;

public class AnyNumber extends Number implements Comparable>{
    private final T number;
    private final Class numberClass ;
    @SuppressWarnings("unchecked")
    public AnyNumber(T number){
        this.number = number;
        numberClass = (Class)number.getClass();
    }

    @Override
    public int intValue() {
        return number.intValue();
    }

    @Override
    public long longValue() {
        return number.longValue();
    }

    @Override
    public float floatValue() {
        return number.floatValue();
    }

    @Override
    public double doubleValue() {
        return number.doubleValue();
    }

    @SuppressWarnings("unchecked")
    public static  AnyNumber valueOf(Object aNumber,Class numberClass){
        if (aNumber == null){
            return null;
        }
        T inner = null;
        if (numberClass.equals(aNumber.getClass())){
            inner = (T)aNumber;
        }else if (aNumber instanceof Number){
            if (numberClass.equals(Integer.class)){
                inner = (T)(Integer.valueOf(((Number)aNumber).intValue()));
            }else if (numberClass.equals(Short.class)){
                inner =  (T)(Short.valueOf(((Number)aNumber).shortValue()));
            }else if (numberClass.equals(Long.class)){
                inner = (T)(Long.valueOf(((Number)aNumber).longValue()));
            }else if (numberClass.equals(Byte.class)){
                inner = (T)(Byte.valueOf(((Number)aNumber).byteValue()));
            }else if (numberClass.equals(Float.class)){
                inner = (T)(Float.valueOf(((Number)aNumber).floatValue()));
            }else if (numberClass.equals(Double.class)){
                inner = (T)(Double.valueOf(((Number)aNumber).doubleValue()));
            }
        }
        try {
            if (inner == null) {
                inner = numberClass.getConstructor(String.class).newInstance(String.valueOf(aNumber));
            }
        } catch (Exception e) {
            throw  new RuntimeException(e);
        }
        return new AnyNumber<>(inner);
    }

    public T value(){
        return number;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof AnyNumber)) return false;

        AnyNumber anyNumber = (AnyNumber) o;

        if (!Objects.equals(number, anyNumber.number)) return false;
        return Objects.equals(numberClass, anyNumber.numberClass);
    }

    @Override
    public int hashCode() {
        int result = number != null ? number.hashCode() : 0;
        result = 31 * result + (numberClass != null ? numberClass.hashCode() : 0);
        return result;
    }

    @Override
    public int compareTo(AnyNumber o) {
        T oNumber = o.number;
        return (int)(this.number.doubleValue() - o.number.doubleValue());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy