# Class ReferenceType

java.lang.Object
org.apache.bcel.generic.Type
org.apache.bcel.generic.ReferenceType

Direct Known Subclasses:
  `ArrayType, ObjectType, UninitializedObjectType`

public abstract class ReferenceType extends Type
Super class for object and array types.

- ## Field Summary

  ### Fields inherited from class Type

  `BOOLEAN, BYTE, CHAR, CLASS, DOUBLE, FLOAT, INT, LONG, NO_ARGS, NULL, OBJECT, SHORT, signature, STRING, STRINGBUFFER, THROWABLE, type, UNKNOWN, VOID`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `ReferenceType(byte t, String s)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `ReferenceType`
  `firstCommonSuperclass(ReferenceType t)`
  Deprecated.
  Use getFirstCommonSuperclass(ReferenceType t) which has slightly changed semantics.
  `ReferenceType`
  `getFirstCommonSuperclass(ReferenceType t)`
  This commutative operation returns the first common superclass (narrowest ReferenceType referencing a class, not an interface).
  `boolean`
  `isAssignmentCompatibleWith(Type t)`
  Return true iff this is assignment compatible with another type t as defined in the JVM specification; see the AASTORE definition there.
  `boolean`
  `isCastableTo(Type t)`
  Return true iff this type is castable to another type t as defined in the JVM specification.

  ### Methods inherited from class Type

  `equals, getArgumentTypes, getClassName, getMethodSignature, getReturnType, getSignature, getSignature, getSize, getType, getType, getType, getTypes, hashCode, normalizeForStackOrLocal, toString`

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### ReferenceType

    protected ReferenceType(byte t, String s)

- ## Method Details

  - ### firstCommonSuperclass

    @Deprecated public ReferenceType firstCommonSuperclass(ReferenceType t) throws ClassNotFoundException
    Deprecated.
    Use getFirstCommonSuperclass(ReferenceType t) which has slightly changed semantics.
    This commutative operation returns the first common superclass (narrowest ReferenceType referencing a class, not an interface). If one of the types is a superclass of the other, the former is returned. If "this" is NULL, then t is returned. If t is NULL, then "this" is returned. If "this" equals t ['this.equals(t)'] "this" is returned. If "this" or t is an ArrayType, then `Type.OBJECT` is returned. If "this" or t is a ReferenceType referencing an interface, then `Type.OBJECT` is returned. If not all of the two classes' superclasses cannot be found, "null" is returned. See the JVM specification edition 2, "�4.9.2 The Bytecode Verifier".
    Parameters:
      `t` - the other type.
    Returns:
      the first common superclass.
    Throws:
      `ClassNotFoundException` - on failure to find superclasses of this type, or the type passed as a parameter.

  - ### getFirstCommonSuperclass

    public ReferenceType getFirstCommonSuperclass(ReferenceType t) throws ClassNotFoundException
    This commutative operation returns the first common superclass (narrowest ReferenceType referencing a class, not an interface). If one of the types is a superclass of the other, the former is returned. If "this" is NULL, then t is returned. If t is NULL, then "this" is returned. If "this" equals t ['this.equals(t)'] "this" is returned. If "this" or t is an ArrayType, then `Type.OBJECT` is returned; unless their dimensions match. Then an ArrayType of the same number of dimensions is returned, with its basic type being the first common super class of the basic types of "this" and t. If "this" or t is a ReferenceType referencing an interface, then `Type.OBJECT` is returned. If not all of the two classes' superclasses cannot be found, "null" is returned. See the JVM specification edition 2, "�4.9.2 The Bytecode Verifier".
    Parameters:
      `t` - the other type.
    Returns:
      the first common superclass.
    Throws:
      `ClassNotFoundException` - on failure to find superclasses of this type, or the type passed as a parameter.

  - ### isAssignmentCompatibleWith

    public boolean isAssignmentCompatibleWith(Type t) throws ClassNotFoundException
    Return true iff this is assignment compatible with another type t as defined in the JVM specification; see the AASTORE definition there.
    Parameters:
      `t` - the other type.
    Returns:
      true iff this is assignment compatible with another type t.
    Throws:
      `ClassNotFoundException` - if any classes or interfaces required to determine assignment compatibility can't be found.

  - ### isCastableTo

    public boolean isCastableTo(Type t) throws ClassNotFoundException
    Return true iff this type is castable to another type t as defined in the JVM specification. The case where this is `Type.NULL` is not defined (see the CHECKCAST definition in the JVM specification). However, because for example CHECKCAST doesn't throw a ClassCastException when casting a null reference to any Object, true is returned in this case.
    Parameters:
      `t` - the other type.
    Returns:
      true iff this type is castable to another type t.
    Throws:
      `ClassNotFoundException` - if any classes or interfaces required to determine assignment compatibility can't be found.