package org.unsynchronized; import java.io.*; import java.util.*; /** * <p> * Enum class that describes the type of a field encoded inside a classdesc description. * </p> * * <p> * This stores both information on the type (reference/array vs. primitive) and, in cases * of reference or array types, the name of the class being referred to. * </p> */ public enum FieldType { BYTE ('B', "byte"), CHAR ('C', "char"), DOUBLE ('D', "double"), FLOAT ('F', "float"), INTEGER ('I', "int"), LONG ('J', "long"), SHORT ('S', "String"), BOOLEAN ('Z', "boolean"), ARRAY ('['), OBJECT ('L'); private final char ch; private final String javatype; /** * Constructor for non-object (primitive) types. * * @param ch the character representing the type (must match one of those listed in * prim_typecode or obj_typecode in the Object Serialization Stream Protocol) */ FieldType(char ch) { this(ch, null); } /** * Constructor. * * @param ch the character representing the type (must match one of those listed in * prim_typecode or obj_typecode in the Object Serialization Stream Protocol) * @param javatype the name of the object class, where applicable (or null if not) */ FieldType(char ch, String javatype) { this.ch = ch; this.javatype = javatype; } /** * Gets the class name for a reference or array type. * * @return the name of the class being referred to, or null if this is not a * reference/array type */ public String getJavaType() { return this.javatype; } /** * Gets the type character for this field. * * @return the type code character for this field; values will be one of those in * prim_typecode or obj_typecode in the protocol spec */ public char ch() { return ch; } /** * Given a byte containing a type code, return the corresponding enum. * * @param b the type code; must be one of the charcaters in obj_typecode or * prim_typecode in the protocol spec * @return the corresponding fieldtype enum * @throws ValidityException if the type code is invalid */ public static FieldType get(byte b) throws ValidityException { switch(b) { case 'B': return BYTE; case 'C': return CHAR; case 'D': return DOUBLE; case 'F': return FLOAT; case 'I': return INTEGER; case 'J': return LONG; case 'S': return SHORT; case 'Z': return BOOLEAN; case '[': return ARRAY; case 'L': return OBJECT; default: throw new ValidityException("invalid field type char: " + b); } } }