vmfield.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 118 行

JAVA
118
字号
/*
 * $Id: VmField.java,v 1.3 2004/02/02 18:42:24 epr Exp $
 */

package org.jnode.vm.classmgr;

import java.lang.reflect.Field;

public abstract class VmField extends VmMember {

	/** java.lang.reflect.Field corresponding to this field */
	private Field javaField;
	/** Type of this field */
	private VmType type;
	/** Is the type of this field primitive? */
	private final boolean primitive;
	/** The size of this field in bytes */
	private final byte typeSize;

	/**
	 * Create a new instance
	 * @param name
	 * @param signature
	 * @param modifiers
	 * @param declaringClass
	 * @param slotSize
	 */
	protected VmField(
		String name,
		String signature,
		int modifiers,
		VmType declaringClass,
		int slotSize) {
		super(name, signature, modifiers | (((Modifier.isPrimitive(signature) || Modifier.isAddressType(signature)) ? 0 : Modifier.ACC_OBJECTREF)), declaringClass);
		this.primitive = Modifier.isPrimitive(signature);
		this.typeSize = Modifier.getTypeSize(signature, slotSize);
	}

	/**
	 * Is this a field with a primitive type?
	 * @return boolean
	 */
	public boolean isPrimitive() {
		return primitive;
	}
	
	/**
	 * Is the field of the type Address?
	 * @return boolean
	 */
	public boolean isAddressType() {
		return Modifier.isAddressType(signature);
	}

	/**
	 * Is the field a non-primitive field and not an address type?
	 * @return boolean
	 */
	public boolean isObjectRef() {
		return Modifier.isObjectRef(getModifiers());
	}

	/**
	 * Is this a field of double width (double, long)
	 * @return boolean
	 */
	public boolean isWide() {
		return wide;
	}

	/**
	 * Return me as java.lang.reflect.Field
	 * @return Field
	 */
	public Field asField() {
		if (javaField == null) {
			javaField = new Field(this);
		}
		return javaField;
	}

	/**
	 * Resolve the type of this field
	 * @param cl
	 */
	protected synchronized void resolve(VmClassLoader cl) {
		try {
			type = new Signature(getSignature(), declaringClass.getLoader()).getType();
		} catch (ClassNotFoundException ex) {
			throw (Error)new NoClassDefFoundError().initCause(ex);
		}
	}

	public String toString() {
		return getMangledName();
	}

	public String getMangledName() {
		return mangleClassName(declaringClass.getName())
			+ mangle("." + getName() + '.' + getSignature());
	}

	/**
	 * Returns the type.
	 * @return VmClass
	 */
	public VmType getType() {
		return type;
	}
	
	/**
	 * Gets the size of this field in bytes [1..8].
	 * @return size of this field
	 */
	public byte getTypeSize() {
		return typeSize;
	}
}

⌨️ 快捷键说明

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