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

org.rx.beans.NEnum Maven / Gradle / Ivy

package org.rx.beans;

import lombok.SneakyThrows;
import org.rx.core.Contract;

import java.io.Serializable;

import static org.rx.core.Contract.*;

public interface NEnum & NEnum> extends Serializable {
    static  & NEnum> T valueOf(Class type, int value) {
        require(type);

        for (T nEnum : type.getEnumConstants()) {
            if (nEnum.getValue() == value) {
                return nEnum;
            }
        }
        return null;
    }

    int getValue();

    default FlagsEnum flags() {
        return new FlagsEnum<>(this);
    }

    @SuppressWarnings(NonWarning)
    default FlagsEnum add(T... nEnum) {
        require(nEnum);

        FlagsEnum flagsEnum = flags();
        flagsEnum.add(nEnum);
        return flagsEnum;
    }

    @SuppressWarnings(NonWarning)
    @SneakyThrows
    default String toDescription() {
        Class type = this.getClass();
        return Contract.toDescription(type.getField(((T) this).name()));
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy