## bsh
Class Primitive

    java.lang.Object
      bsh.Primitive

All Implemented Interfaces:
  ParserConstants, java.io.Serializable

public final class Primitive
extends java.lang.Object
implements ParserConstants, java.io.Serializable

Wrapper for primitive types in Bsh. This is package public because it is used in the implementation of some bsh commands. See the note in LHS.java about wrapping objects.

See Also:
  Serialized Form

Field Summary
`static Primitive` `NULL`
`static Primitive` `VOID` VOID means "no type".

Fields inherited from interface bsh.ParserConstants

`_DEFAULT, ABSTRACT, ANDASSIGN, ANDASSIGNX, ASSIGN, BANG, BIT_AND, BIT_ANDX, BIT_OR, BIT_ORX, BOOL_AND, BOOL_ANDX, BOOL_OR, BOOL_ORX, BOOLEAN, BREAK, BYTE, CASE, CATCH, CHAR, CHARACTER_LITERAL, CLASS, COLON, COMMA, CONST, CONTINUE, DECIMAL_LITERAL, DECR, DEFAULT, DIGIT, DO, DOT, DOUBLE, ELSE, ENUM, EOF, EQ, EXPONENT, EXTENDS, FALSE, FINAL, FINALLY, FLOAT, FLOATING_POINT_LITERAL, FOR, FORMAL_COMMENT, GE, GEX, GOTO, GT, GTX, HASH_BANG_COMMENT, HEX_LITERAL, HOOK, IDENTIFIER, IF, IMPLEMENTS, IMPORT, INCR, INSTANCEOF, INT, INTEGER_LITERAL, INTERFACE, LBRACE, LBRACKET, LE, LETTER, LEX, LONG, LPAREN, LSHIFT, LSHIFTASSIGN, LSHIFTASSIGNX, LSHIFTX, LT, LTX, MINUS, MINUSASSIGN, MOD, MODASSIGN, MULTI_LINE_COMMENT, NATIVE, NE, NEW, NONPRINTABLE, OCTAL_LITERAL, ORASSIGN, ORASSIGNX, PACKAGE, PLUS, PLUSASSIGN, PRIVATE, PROTECTED, PUBLIC, RBRACE, RBRACKET, RETURN, RPAREN, RSIGNEDSHIFT, RSIGNEDSHIFTASSIGN, RSIGNEDSHIFTASSIGNX, RSIGNEDSHIFTX, RUNSIGNEDSHIFT, RUNSIGNEDSHIFTASSIGN, RUNSIGNEDSHIFTASSIGNX, RUNSIGNEDSHIFTX, SEMICOLON, SHORT, SINGLE_LINE_COMMENT, SLASH, SLASHASSIGN, STAR, STARASSIGN, STATIC, STRICTFP, STRING_LITERAL, SWITCH, SYNCHRONIZED, THROW, THROWS, TILDE, tokenImage, TRANSIENT, TRUE, TRY, VOLATILE, WHILE, XOR, XORASSIGN`

Constructor Summary
`Primitive(boolean value)`
`Primitive(byte value)`
`Primitive(char value)`
`Primitive(double value)`
`Primitive(float value)`
`Primitive(int value)`
`Primitive(long value)`
`Primitive(java.lang.Object value)`
`Primitive(short value)`

Method Summary
`static java.lang.Object` `binaryOperation(java.lang.Object obj1, java.lang.Object obj2, int kind)` Perform a binary operation on two Primitives or wrapper types.
`boolean` `booleanValue()`
`static java.lang.Class` `boxType(java.lang.Class primitiveType)` Get the corresponding java.lang wrapper class for the primitive TYPE class.
`Primitive` `castToType(java.lang.Class toType, int operation)` Cast this bsh.Primitive value to a new bsh.Primitive value This is usually a numeric type cast.
`boolean` `equals(java.lang.Object obj)` Primitives compare equal with other Primitives containing an equal wrapped value.
`static Primitive` `getDefaultValue(java.lang.Class type)` Get the appropriate default value per JLS 4.5.4
`java.lang.Class` `getType()` Get the corresponding Java primitive TYPE class for this Primitive.
`java.lang.Object` `getValue()` Return the primitive value stored in its java.lang wrapper class
`int` `hashCode()` The hash of the Primitive is tied to the hash of the wrapped value but shifted so that they are not the same.
`int` `intValue()`
`boolean` `isNumber()` Determine if this primitive is a numeric type.
`static boolean` `isWrapperType(java.lang.Class type)`
`java.lang.Number` `numberValue()`
`java.lang.String` `toString()`
`static Primitive` `unaryOperation(Primitive val, int kind)`
`static java.lang.Class` `unboxType(java.lang.Class wrapperType)` Get the corresponding primitive TYPE class for the java.lang wrapper class type.
`static java.lang.Object` `unwrap(java.lang.Object obj)` Unwrap primitive values and map voids to nulls.
`static java.lang.Object[]` `unwrap(java.lang.Object[] args)`
`static java.lang.Object[]` `wrap(java.lang.Object[] args, java.lang.Class[] paramTypes)`
`static java.lang.Object` `wrap(java.lang.Object value, java.lang.Class type)` Wrap primitive values (as indicated by type param) and nulls in the Primitive class.

Methods inherited from class java.lang.Object
`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

Field Detail

### NULL

    public static final Primitive NULL

### VOID

    public static final Primitive VOID

  VOID means "no type". Strictly speaking, this makes no sense here. But for practical reasons we'll consider the lack of a type to be a special value.

Constructor Detail

### Primitive

    public Primitive(java.lang.Object value)

### Primitive

    public Primitive(boolean value)

### Primitive

    public Primitive(byte value)

### Primitive

    public Primitive(short value)

### Primitive

    public Primitive(char value)

### Primitive

    public Primitive(int value)

### Primitive

    public Primitive(long value)

### Primitive

    public Primitive(float value)

### Primitive

    public Primitive(double value)

Method Detail

### getValue

    public java.lang.Object getValue()

  Return the primitive value stored in its java.lang wrapper class

### toString

    public java.lang.String toString()

### getType

    public java.lang.Class getType()

  Get the corresponding Java primitive TYPE class for this Primitive.

  Returns:
    the primitive TYPE class type of the value or Void.TYPE for Primitive.VOID or null value for type of Primitive.NULL

### binaryOperation

    public static java.lang.Object binaryOperation(java.lang.Object obj1,
                                                   java.lang.Object obj2,
                                                   int kind)
                                            throws UtilEvalError

  Perform a binary operation on two Primitives or wrapper types. If both original args were Primitives return a Primitive result else it was mixed (wrapper/primitive) return the wrapper type. The exception is for boolean operations where we will return the primitive type eithe way.

  Throws:
    `UtilEvalError`

### unaryOperation

    public static Primitive unaryOperation(Primitive val,
                                           int kind)
                                    throws UtilEvalError

  Throws:
    `UtilEvalError`

### intValue

    public int intValue()
                 throws UtilEvalError

  Throws:
    `UtilEvalError`

### booleanValue

    public boolean booleanValue()
                         throws UtilEvalError

  Throws:
    `UtilEvalError`

### isNumber

    public boolean isNumber()

  Determine if this primitive is a numeric type. i.e. not boolean, null, or void (but including char)

### numberValue

    public java.lang.Number numberValue()
                                 throws UtilEvalError

  Throws:
    `UtilEvalError`

### equals

    public boolean equals(java.lang.Object obj)

  Primitives compare equal with other Primitives containing an equal wrapped value.

### hashCode

    public int hashCode()

  The hash of the Primitive is tied to the hash of the wrapped value but shifted so that they are not the same.

### unwrap

    public static java.lang.Object unwrap(java.lang.Object obj)

  Unwrap primitive values and map voids to nulls. Non Primitive types remain unchanged.

  Parameters:
    `obj` - object type which may be bsh.Primitive
  Returns:
    corresponding "normal" Java type, "unwrapping" any bsh.Primitive types to their wrapper types.

### unwrap

    public static java.lang.Object[] unwrap(java.lang.Object[] args)

### wrap

    public static java.lang.Object[] wrap(java.lang.Object[] args,
                                          java.lang.Class[] paramTypes)

### wrap

    public static java.lang.Object wrap(java.lang.Object value,
                                        java.lang.Class type)

  Wrap primitive values (as indicated by type param) and nulls in the Primitive class. Values not primitive or null are left unchanged. Primitive values are represented by their wrapped values in param value.

  The value null is mapped to Primitive.NULL. Any value specified with type Void.TYPE is mapped to Primitive.VOID.

### getDefaultValue

    public static Primitive getDefaultValue(java.lang.Class type)

  Get the appropriate default value per JLS 4.5.4

### boxType

    public static java.lang.Class boxType(java.lang.Class primitiveType)

  Get the corresponding java.lang wrapper class for the primitive TYPE class. e.g. Integer.TYPE -> Integer.class

### unboxType

    public static java.lang.Class unboxType(java.lang.Class wrapperType)

  Get the corresponding primitive TYPE class for the java.lang wrapper class type. e.g. Integer.class -> Integer.TYPE

### castToType

    public Primitive castToType(java.lang.Class toType,
                                int operation)
                         throws UtilEvalError

  Cast this bsh.Primitive value to a new bsh.Primitive value This is usually a numeric type cast. Other cases include: A boolean can be cast to boolen null can be cast to any object type and remains null Attempting to cast a void causes an exception

  Parameters:
    `toType` - is the java object or primitive TYPE class
  Throws:
    `UtilEvalError`

### isWrapperType

    public static boolean isWrapperType(java.lang.Class type)