< prev index next >
src/java.base/share/classes/java/io/ObjectStreamField.java
Print this page
rev 17455 : 8184603: Create ObjectStreamField signature lazily when possible
Reviewed-by: rriggs
*** 44,54 ****
{
/** field name */
private final String name;
/** canonical JVM signature of field type */
! private final String signature;
/** field type (Object.class if unknown non-primitive type) */
private final Class<?> type;
/** whether or not to (de)serialize field values as unshared */
private final boolean unshared;
/** corresponding reflective field object, if any */
--- 44,54 ----
{
/** field name */
private final String name;
/** canonical JVM signature of field type */
! private volatile String signature;
/** field type (Object.class if unknown non-primitive type) */
private final Class<?> type;
/** whether or not to (de)serialize field values as unshared */
private final boolean unshared;
/** corresponding reflective field object, if any */
*** 89,99 ****
throw new NullPointerException();
}
this.name = name;
this.type = type;
this.unshared = unshared;
! signature = getClassSignature(type).intern();
field = null;
}
/**
* Creates an ObjectStreamField representing a field with the given name,
--- 89,99 ----
throw new NullPointerException();
}
this.name = name;
this.type = type;
this.unshared = unshared;
! signature = null;
field = null;
}
/**
* Creates an ObjectStreamField representing a field with the given name,
*** 240,260 ****
*
* @return the typecode of the serializable field
*/
// REMIND: deprecate?
public char getTypeCode() {
! return signature.charAt(0);
}
/**
* Return the JVM type signature.
*
* @return null if this field has a primitive type.
*/
// REMIND: deprecate?
public String getTypeString() {
! return isPrimitive() ? null : signature;
}
/**
* Offset of field within instance data.
*
--- 240,260 ----
*
* @return the typecode of the serializable field
*/
// REMIND: deprecate?
public char getTypeCode() {
! return getSignature().charAt(0);
}
/**
* Return the JVM type signature.
*
* @return null if this field has a primitive type.
*/
// REMIND: deprecate?
public String getTypeString() {
! return isPrimitive() ? null : getSignature();
}
/**
* Offset of field within instance data.
*
*** 282,292 ****
*
* @return true if and only if this field corresponds to a primitive type
*/
// REMIND: deprecate?
public boolean isPrimitive() {
! char tcode = signature.charAt(0);
return ((tcode != 'L') && (tcode != '['));
}
/**
* Returns boolean value indicating whether or not the serializable field
--- 282,292 ----
*
* @return true if and only if this field corresponds to a primitive type
*/
// REMIND: deprecate?
public boolean isPrimitive() {
! char tcode = getTypeCode();
return ((tcode != 'L') && (tcode != '['));
}
/**
* Returns boolean value indicating whether or not the serializable field
*** 334,341 ****
/**
* Returns JVM type signature of field (similar to getTypeString, except
* that signature strings are returned for primitive fields as well).
*/
String getSignature() {
! return signature;
}
}
--- 334,349 ----
/**
* Returns JVM type signature of field (similar to getTypeString, except
* that signature strings are returned for primitive fields as well).
*/
String getSignature() {
! String sig = signature;
!
! // This lazy calculation is safe since sig can be null iff one of the
! // public constructors are used, in which case type is always
! // initialized to the exact type we want the signature to represent.
! if (sig == null) {
! sig = signature = getClassSignature(type).intern();
! }
! return sig;
}
}
< prev index next >