objectstreamfield.java

来自「JAVA 所有包」· Java 代码 · 共 256 行

JAVA
256
字号
/* * @(#)ObjectStreamField.java	1.25 05/11/17 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *//* * Licensed Materials - Property of IBM * RMI-IIOP v1.0 * Copyright IBM Corp. 1998 1999  All Rights Reserved * * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */package com.sun.corba.se.impl.io;import java.lang.reflect.Field;import java.lang.Comparable;import java.util.Hashtable;import sun.corba.Bridge ;import java.security.AccessController ;import java.security.PrivilegedAction ;/** * A description of a field in a serializable class. * A array of these is used to declare the persistent fields of * a class. * */public class ObjectStreamField implements Comparable {    private static final Bridge bridge = 	(Bridge)AccessController.doPrivileged(	    new PrivilegedAction() {		public Object run() {		    return Bridge.get() ;		}	    } 	) ;    /**     * Create a named field with the specified type.     */    ObjectStreamField(String n, Class clazz) {    	name = n;    	this.clazz = clazz;	// Compute the typecode for easy switching	if (clazz.isPrimitive()) {	    if (clazz == Integer.TYPE) {		type = 'I';	    } else if (clazz == Byte.TYPE) {		type = 'B';	    } else if (clazz == Long.TYPE) {		type = 'J';	    } else if (clazz == Float.TYPE) {		type = 'F';	    } else if (clazz == Double.TYPE) {		type = 'D';	    } else if (clazz == Short.TYPE) {		type = 'S';	    } else if (clazz == Character.TYPE) {		type = 'C';	    } else if (clazz == Boolean.TYPE) {		type = 'Z';	    }	} else if (clazz.isArray()) {	    type = '[';	    typeString = ObjectStreamClass.getSignature(clazz);	} else {	    type = 'L';	    typeString = ObjectStreamClass.getSignature(clazz);	}	if (typeString != null)	    signature = typeString;	else	    signature = String.valueOf(type);    }    ObjectStreamField(Field field) {	this(field.getName(), field.getType());	setField( field ) ;    }    /**     * Create an ObjectStreamField containing a reflected Field.     */    ObjectStreamField(String n, char t, Field f, String ts)    {	name = n;	type = t;	setField( f ) ;	typeString = ts;	if (typeString != null)	    signature = typeString;	else	    signature = String.valueOf(type);	    }    /**     * Get the name of this field.     */    public String getName() {    	return name;    }    /**     * Get the type of the field.     */    public Class getType() {    	if (clazz != null)    	    return clazz;	switch (type) {	case 'B': clazz = Byte.TYPE;	    break;	case 'C': clazz = Character.TYPE;	    break;	case 'S': clazz = Short.TYPE;	    break;	case 'I': clazz = Integer.TYPE;	    break;	case 'J': clazz = Long.TYPE;	    break;	case 'F': clazz = Float.TYPE;	    break;	case 'D': clazz = Double.TYPE;	    break;	case 'Z': clazz = Boolean.TYPE;	    break;	case '[':	case 'L':	    clazz = Object.class;	    break;	}    	return clazz;    }    public char getTypeCode() {	return type;    }    public String getTypeString() {	return typeString;    }    Field getField() { 	return field;    }    void setField(Field field) { 	this.field = field; 	this.fieldID = bridge.objectFieldOffset( field ) ;    }    /*     * Default constructor creates an empty field.     * Usually used just to get to the sort functions.     */    ObjectStreamField() {    }    /**     * test if this field is a primitive or not.     */    public boolean isPrimitive() {	return (type != '[' && type != 'L');    }    /**     * Compare this with another ObjectStreamField.     * return -1 if this is smaller, 0 if equal, 1 if greater     * types that are primitives are "smaller" than objects.     * if equal, the names are compared.     */    public int compareTo(Object o) {	ObjectStreamField f2 = (ObjectStreamField)o;	boolean thisprim = (this.typeString == null);	boolean otherprim = (f2.typeString == null);	if (thisprim != otherprim) {	    return (thisprim ? -1 : 1);	}	return this.name.compareTo(f2.name);    }    /**     * Compare the types of two class descriptors.     * The match if they have the same primitive types.     * or if they are both objects and the object types match.     */    public boolean typeEquals(ObjectStreamField other) {	if (other == null || type != other.type)	    return false;	/* Return true if the primitive types matched */	if (typeString == null && other.typeString == null)	    return true;	return ObjectStreamClass.compareClassNames(typeString,						   other.typeString,						   '/');    }    /* Returns the signature of the Field.     *     */    public String getSignature() {	return signature;    }    /**     * Return a string describing this field.     */    public String toString() {	if (typeString != null)	    return typeString + " " + name;	else	    return type + " " + name;    }    public Class getClazz() {        return clazz;    }    /* Returns the Field ID     *     */    public long getFieldID() {	return fieldID ;    }    private String name;		// the name of the field    private char type;			// type first byte of the type signature    private Field field;		// Reflected field    private String typeString;		// iff object, typename    private Class clazz;		// the type of this field, if has been resolved    // the next 2 things are RMI-IIOP specific, it can be easily    // removed, if we can figure out all place where there are dependencies    // to this.  Signature is esentially equal to typestring. Then    // essentially we can use the java.io.ObjectStreamField as such.    private String signature;   // the signature of the field    private long fieldID = Bridge.INVALID_FIELD_OFFSET ; }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?