Skip to content

Instantly share code, notes, and snippets.

@swapnilshrikhande
Created June 9, 2021 04:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save swapnilshrikhande/6e2961a7d5647313e9d26c7d560a50a9 to your computer and use it in GitHub Desktop.
Save swapnilshrikhande/6e2961a7d5647313e9d26c7d560a50a9 to your computer and use it in GitHub Desktop.
Parsing String from JSON into an Enum value
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
class Person {
public Gender gender;
public int getANumber() {
return aNumber;
}
public void setANumber(int aNumber) {
this.aNumber = aNumber;
}
public int aNumber;
public Gender getGender() {
return gender;
}
public void setGender(Gender theGender){
System.out.println("In setter Enum");
this.gender = theGender;
}
/*public void setGender(String theGender){
System.out.println("In setter String");
this.gender = Gender.valueOf(theGender);
}*/
}
enum Gender {
MALE, FEMALE, OTHER;
}
class ParsingEnum {
public static void main(String[] args) {
Person person = new Person();
Type fieldType = getType(person,"gender");
Class typeClass = ((Class) fieldType);
System.out.println( "type = "+fieldType );
System.out.println("Is Enum = "+typeClass.isEnum() );
invokeSetter(person,"gender", Enum.valueOf( typeClass ,"MALE") );
System.out.println( "Person Gender = "+ person.gender );
fieldType = getType(person,"aNumber");
typeClass = ((Class) fieldType);
System.out.println( "type = "+fieldType );
System.out.println("Is Enum = "+typeClass.isEnum() );
}
public static void invokeSetter(Object obj, String propertyName, Object variableValue) {
PropertyDescriptor pd;
try {
System.out.println("propertyName = "+propertyName);
System.out.println("Class = "+obj.getClass());
pd = new PropertyDescriptor(propertyName, obj.getClass());
Method setter = pd.getWriteMethod();
try {
setter.invoke(obj,variableValue);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
} catch (IntrospectionException e) {
e.printStackTrace();
}
}
public static Type getType(Object obj, String propertyName){
PropertyDescriptor pd;
try {
pd = new PropertyDescriptor(propertyName, obj.getClass());
Method setter = pd.getWriteMethod();
return setter.getGenericParameterTypes()[0];
} catch (IntrospectionException e) {
System.out.println("Error fetching field type Object : "+obj.getClass()+" : Field : "+propertyName);
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment