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()));
}
}