package org.itsnat.droid.impl.xmlinflater;
import org.itsnat.droid.ItsNatDroidException;
import org.itsnat.droid.impl.util.MiscUtil;
import java.lang.reflect.Field;
/**
* Created by jmarranz on 23/09/14.
*/
public class FieldContainer<T>
{
protected final Class<?> clasz;
protected final String fieldName;
protected Field field;
public FieldContainer(String className,String fieldName)
{
this(MiscUtil.resolveClass(className),fieldName);
}
public FieldContainer(Class<?> clasz,String fieldName)
{
this.clasz = clasz;
this.fieldName = fieldName;
}
public Field getField()
{
try
{
if (field == null)
{
this.field = clasz.getDeclaredField(fieldName);
field.setAccessible(true); // Pues normalmente serĂ¡n atributos ocultos
}
return field;
}
catch (NoSuchFieldException ex) { throw new ItsNatDroidException(ex); }
}
@SuppressWarnings("unchecked")
public T get(Object obj)
{
try
{
Field field = getField();
return (T)field.get(obj);
}
catch (IllegalAccessException ex) { throw new ItsNatDroidException(ex); }
}
public void set(Object obj, T value)
{
try
{
Field field = getField();
field.set(obj, value);
}
catch (IllegalAccessException ex) { throw new ItsNatDroidException(ex); }
}
}