Created
June 9, 2021 04:34
-
-
Save swapnilshrikhande/6e2961a7d5647313e9d26c7d560a50a9 to your computer and use it in GitHub Desktop.
Parsing String from JSON into an Enum value
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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