package com.cardshifter.serialization; import com.cardshifter.api.serial.ReflField; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; /** * Created by Simon on 4/25/2015. */ public class JavaReflectField implements ReflField { private final Field field; public JavaReflectField(Field field) { this.field = field; } @Override public boolean isStatic() { return Modifier.isStatic(field.getModifiers()); } @Override public Class<?> getGenericType(int i) { Type genericFieldType = field.getGenericType(); if (!(genericFieldType instanceof ParameterizedType)) { throw new IllegalArgumentException("Cannot deserialize a Map without generics types"); } ParameterizedType aType = (ParameterizedType) genericFieldType; Type[] fieldArgTypes = aType.getActualTypeArguments(); return (Class<?>) fieldArgTypes[i]; } @Override public void setAccessible(boolean b) { field.setAccessible(true); } @Override public Class<?> getType() { return field.getType(); } @Override public void set(Object obj, Object value) throws Exception { field.set(obj, value); } @Override public String getName() { return field.getName(); } @Override public Object get(Object obj) throws Exception { return field.get(obj); } @Override public String toString() { return field.toString(); } }