core/src/main/java/com/twitter/elephantbird/thrift/TStructDescriptor.java
private static byte getTTypeFromJavaType(Type jType) {

    // check primitive types and final classes
    if (jType == Boolean.TYPE || jType == Boolean.class)   return TType.BOOL;
    if (jType == Byte.TYPE    || jType == Byte.class)      return TType.BYTE;
    if (jType == Short.TYPE   || jType == Short.class)     return TType.I16;
    if (jType == Integer.TYPE || jType == Integer.class)   return TType.I32;
    if (jType == Long.TYPE    || jType == Long.class)      return TType.I64;
    if (jType == Double.TYPE  || jType == Double.class)    return TType.DOUBLE;
    if (jType == String.class)                             return TType.STRING;
    if (jType == byte[].class)                             return TType.STRING; // buffer
    if (jType == Void.class)                               return TType.VOID;

    // non-generic simple classes
    if (jType instanceof Class) {
      Class<?> klass = (Class<?>) jType;

      if (TEnum.class.isAssignableFrom(klass))      return TType.ENUM;
      if (ByteBuffer.class.isAssignableFrom(klass)) return TType.STRING; // buffer (ByteBuffer)
      if (TBase.class.isAssignableFrom(klass))      return TType.STRUCT;
    }

    // generic types
    if (jType instanceof ParameterizedType) {
      Class<?> klass = (Class<?>) ((ParameterizedType)jType).getRawType();

      if (Map.class.isAssignableFrom(klass))    return TType.MAP;
      if (Set.class.isAssignableFrom(klass))    return TType.SET;
      if (List.class.isAssignableFrom(klass))   return TType.LIST;
    }

    throw new IllegalArgumentException("cannot convert java type '" + jType + "'  to thrift type");
  }
private static byte getTTypeFromJavaType(Type jType) {

    // check primitive types and final classes
    if (jType == Boolean.TYPE || jType == Boolean.class)   return TType.BOOL;
    if (jType == Byte.TYPE    || jType == Byte.class)      return TType.BYTE;
    if (jType == Short.TYPE   || jType == Short.class)     return TType.I16;
    if (jType == Integer.TYPE || jType == Integer.class)   return TType.I32;
    if (jType == Long.TYPE    || jType == Long.class)      return TType.I64;
    if (jType == Double.TYPE  || jType == Double.class)    return TType.DOUBLE;
    if (jType == String.class)                             return TType.STRING;
    if (jType == byte[].class)                             return TType.STRING; // buffer
    if (jType == Void.class)                               return TType.VOID;

    // non-generic simple classes
    if (jType instanceof Class) {
      Class<?> klass = (Class<?>) jType;

      if (TEnum.class.isAssignableFrom(klass))      return TType.ENUM;
      if (ByteBuffer.class.isAssignableFrom(klass)) return TType.STRING; // buffer (ByteBuffer)
      if (TBase.class.isAssignableFrom(klass))      return TType.STRUCT;
    }

    // generic types
    if (jType instanceof ParameterizedType) {
      Class<?> klass = (Class<?>) ((ParameterizedType)jType).getRawType();

      if (Map.class.isAssignableFrom(klass))    return TType.MAP;
      if (Set.class.isAssignableFrom(klass))    return TType.SET;
      if (List.class.isAssignableFrom(klass))   return TType.LIST;
    }

    throw new IllegalArgumentException("cannot convert java type '" + jType + "'  to thrift type");
  }
Derives Thrift TType from java {@link Type} of a thrift field