package cn.citycraft.GsonAgent.normal.reflect; import java.lang.reflect.Type; import com.google.gson.reflect.TypeToken; import cn.citycraft.GsonAgent.api.reflect.TypeTokenAbstract; import cn.citycraft.GsonAgent.api.utils.Utils; @SuppressWarnings({ "unchecked", "rawtypes" }) public class TypeTokenHandle implements cn.citycraft.GsonAgent.api.reflect.TypeTokenAbstract { private TypeToken handle; public TypeTokenHandle() { try { handle = new TypeToken() { }; } catch (final Exception e) { throw new RuntimeException(e); } } public TypeTokenHandle(final Type type) { try { handle = Utils.newInstance(TypeToken.class, Type.class, type); } catch (final Exception e) { throw new RuntimeException(e); } } protected TypeTokenHandle(final TypeToken handle) { this.handle = handle; } public static TypeTokenAbstract get(final Class type) { return new TypeTokenHandle(TypeToken.get(type)); } public static TypeTokenAbstract get(final Type type) { return new TypeTokenHandle(TypeToken.get(type)); } @Override public TypeToken getHandle() { return this.handle; } @Override public Class getRawType() { return getHandle().getRawType(); } @Override public Type getType() { return getHandle().getType(); } @Override public boolean isAssignableFrom(final Class cls) { return getHandle().isAssignableFrom(cls); } @Override public boolean isAssignableFrom(final cn.citycraft.GsonAgent.api.reflect.TypeToken token) { return getHandle().isAssignableFrom((TypeToken) token.getHandle()); } @Override public boolean isAssignableFrom(final Type from) { return getHandle().isAssignableFrom(from); } }