FileDocCategorySizeDatePackage
ObjectStreamField.javaAPI DocJava SE 6 API7880Tue Jun 10 00:25:34 BST 2008java.io

ObjectStreamField

public class ObjectStreamField extends Object implements Comparable
A description of a Serializable field from a Serializable class. An array of ObjectStreamFields is used to declare the Serializable fields of a class.
author
Mike Warres
author
Roger Riggs
version
1.47, 06/04/07
see
ObjectStreamClass
since
1.2

Fields Summary
private final String
name
field name
private final String
signature
canonical JVM signature of field type
private final Class
type
field type (Object.class if unknown non-primitive type)
private final boolean
unshared
whether or not to (de)serialize field values as unshared
private final Field
field
corresponding reflective field object, if any
private int
offset
offset of field value in enclosing field group
Constructors Summary
public ObjectStreamField(String name, Class type)
Create a Serializable field with the specified type. This field should be documented with a serialField tag.

param
name the name of the serializable field
param
type the Class object of the serializable field


                        	       	            
         
	this(name, type, false);
    
public ObjectStreamField(String name, Class type, boolean unshared)
Creates an ObjectStreamField representing a serializable field with the given name and type. If unshared is false, values of the represented field are serialized and deserialized in the default manner--if the field is non-primitive, object values are serialized and deserialized as if they had been written and read by calls to writeObject and readObject. If unshared is true, values of the represented field are serialized and deserialized as if they had been written and read by calls to writeUnshared and readUnshared.

param
name field name
param
type field type
param
unshared if false, write/read field values in the same manner as writeObject/readObject; if true, write/read in the same manner as writeUnshared/readUnshared
since
1.4

	if (name == null) {
	    throw new NullPointerException();
	}
	this.name = name;
	this.type = type;
	this.unshared = unshared;
	signature = ObjectStreamClass.getClassSignature(type).intern();
	field = null;
    
ObjectStreamField(String name, String signature, boolean unshared)
Creates an ObjectStreamField representing a field with the given name, signature and unshared setting.

	if (name == null) {
	    throw new NullPointerException();
	}
	this.name = name;
	this.signature = signature.intern();
	this.unshared = unshared;
	field = null;
	
	switch (signature.charAt(0)) {
	    case 'Z": type = Boolean.TYPE; break;
	    case 'B": type = Byte.TYPE; break;
	    case 'C": type = Character.TYPE; break;
	    case 'S": type = Short.TYPE; break;
	    case 'I": type = Integer.TYPE; break;
	    case 'J": type = Long.TYPE; break;
	    case 'F": type = Float.TYPE; break;
	    case 'D": type = Double.TYPE; break;
	    case 'L":
	    case '[": type = Object.class; break;
	    default: throw new IllegalArgumentException("illegal signature");
	}
    
ObjectStreamField(Field field, boolean unshared, boolean showType)
Creates an ObjectStreamField representing the given field with the specified unshared setting. For compatibility with the behavior of earlier serialization implementations, a "showType" parameter is necessary to govern whether or not a getType() call on this ObjectStreamField (if non-primitive) will return Object.class (as opposed to a more specific reference type).

	this.field = field;
	this.unshared = unshared;
	name = field.getName();
	Class ftype = field.getType();
	type = (showType || ftype.isPrimitive()) ? ftype : Object.class;
	signature = ObjectStreamClass.getClassSignature(ftype).intern();
    
Methods Summary
public intcompareTo(java.lang.Object obj)
Compare this field with another ObjectStreamField. Return -1 if this is smaller, 0 if equal, 1 if greater. Types that are primitives are "smaller" than object types. If equal, the field names are compared.

	ObjectStreamField other = (ObjectStreamField) obj;
	boolean isPrim = isPrimitive();
	if (isPrim != other.isPrimitive()) {
	    return isPrim ? -1 : 1;
	}
	return name.compareTo(other.name);
    
java.lang.reflect.FieldgetField()
Returns field represented by this ObjectStreamField, or null if ObjectStreamField is not associated with an actual field.

	return field;
    
public java.lang.StringgetName()
Get the name of this field.

return
a String representing the name of the serializable field

	return name;
    
public intgetOffset()
Offset of field within instance data.

return
the offset of this field
see
#setOffset

	return offset;
    
java.lang.StringgetSignature()
Returns JVM type signature of field (similar to getTypeString, except that signature strings are returned for primitive fields as well).

	return signature;
    
public java.lang.ClassgetType()
Get the type of the field. If the type is non-primitive and this ObjectStreamField was obtained from a deserialized {@link ObjectStreamClass} instance, then Object.class is returned. Otherwise, the Class object for the type of the field is returned.

return
a Class object representing the type of the serializable field

	return type;
    
public chargetTypeCode()
Returns character encoding of field type. The encoding is as follows:
B byte
C char
D double
F float
I int
J long
L class or interface
S short
Z boolean
[ array

return
the typecode of the serializable field

	return signature.charAt(0);
    
public java.lang.StringgetTypeString()
Return the JVM type signature.

return
null if this field has a primitive type.

	return isPrimitive() ? null : signature;
    
public booleanisPrimitive()
Return true if this field has a primitive type.

return
true if and only if this field corresponds to a primitive type

	char tcode = signature.charAt(0);
	return ((tcode != 'L") && (tcode != '["));
    
public booleanisUnshared()
Returns boolean value indicating whether or not the serializable field represented by this ObjectStreamField instance is unshared.

since
1.4

	return unshared;
    
protected voidsetOffset(int offset)
Offset within instance data.

param
offset the offset of the field
see
#getOffset

	this.offset = offset;
    
public java.lang.StringtoString()
Return a string that describes this field.

	return signature + ' " + name;