Skip to content

Instantly share code, notes, and snippets.

@danielezonca
Created May 16, 2019 20:12
Show Gist options
  • Save danielezonca/593473e44a441d31406990240b4e28e8 to your computer and use it in GitHub Desktop.
Save danielezonca/593473e44a441d31406990240b4e28e8 to your computer and use it in GitHub Desktop.
public enum TypeEnum {
INT {
@Override
protected boolean acceptInternal(Object parameter) {
Class<?> clazz = parameter.getClass();
return clazz.isAssignableFrom(Integer.class) || clazz.isAssignableFrom(int.class);
}
@Override
protected String applyInternal(Object parameter) {
return String.valueOf(parameter);
}
@Override
protected Object unapplyInternal(String parameter) {
return Integer.parseInt(parameter);
}
},
DOUBLE {
@Override
protected boolean acceptInternal(Object parameter) {
Class<?> clazz = parameter.getClass();
return clazz.isAssignableFrom(Double.class) || clazz.isAssignableFrom(double.class);
}
@Override
protected String applyInternal(Object parameter) {
return parameter + "d";
}
@Override
protected Object unapplyInternal(String parameter) {
return Double.parseDouble(parameter);
}
}
// ....
;
protected abstract boolean acceptInternal(Object parameter);
protected abstract String applyInternal(Object parameter);
protected abstract Object unapplyInternal(String parameter);
public static String apply(Object parameter) {
for (TypeEnum value : values()) {
if(value.acceptInternal(parameter)) {
return value.applyInternal(parameter);
}
}
throw new IllegalArgumentException("Not supported");
}
public static Object unapply(String parameter) {
for (TypeEnum value : values()) {
if(value.acceptInternal(parameter)) {
return value.unapplyInternal(parameter);
}
}
throw new IllegalArgumentException("Not supported");
}
}
class Invoker {
public static void apply(Object parameter) {
System.out.println(TypeEnum.apply(parameter));
}
public static void unapply(String parameter) {
System.out.println(TypeEnum.unapply(parameter));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment