# Enum Class TypeKind

java.lang.Object
java.lang.Enum<TypeKind>
java.lang.classfile.TypeKind

All Implemented Interfaces:
  `Serializable, Comparable<TypeKind>, Constable`

public enum TypeKind extends Enum<TypeKind>
Describes the data types Java Virtual Machine operates on. This omits `returnAddress` (JVMS 2.3.3) and includes `void` (JVMS 4.3.3), which appears as a method return type.

The `returnAddress` type is only used by discontinued jump subroutine and return from subroutine instructions. Jump subroutine instructions push `returnAddress` to the operand stack; `astore` instructions store `returnAddress` from the operand stack to local variables; return from subroutine instructions load `returnAddress` from local variables.

## Computational Type

In the `class` file format, local variables (JVMS 2.6.1), and the operand stack (JVMS 2.6.2) of the Java Virtual Machine, `boolean`, `byte`, `char`, `short` types do not exist and are represented by the `int` computational type. `int`, `float`, `reference`, `returnAddress`, `long`, and `doule` are the computational types of the Java Virtual Machine.

See Java Virtual Machine Specification:
  2.2 Data Types
  2.11.1 Types and the Java Virtual Machine
Since:
  24

## Nested Class Summary

### Nested classes/interfaces declared in class Enum

`Enum.EnumDesc<E>`

## Enum Constant Summary

Enum Constants
Enum Constant
Description
`BOOLEAN`
The primitive type `boolean`.
`BYTE`
The primitive type `byte`.
`CHAR`
The primitive type `char`.
`DOUBLE`
The primitive type `double`.
`FLOAT`
The primitive type `float`.
`INT`
The primitive type `int`.
`LONG`
The primitive type `long`.
`REFERENCE`
A reference type.
`SHORT`
The primitive type `short`.
`VOID`
The `void` type, for absence of a value.

## Method Summary

Modifier and Type
Method
Description
`TypeKind`
`asLoadable()`
Returns the computational type for this type, or `void` for `void`.
`static TypeKind`
`from(TypeDescriptor.OfField<?> descriptor)`
Returns the type associated with the specified field descriptor.
`static TypeKind`
`fromDescriptor(CharSequence s)`
Returns the type associated with the specified field descriptor.
`static TypeKind`
`fromNewarrayCode(int newarrayCode)`
Returns the component type described by the array code used as an operand to `newarray`.
`int`
`newarrayCode()`
Returns the code used by the `newarray` instruction to create an array of this component type, or `-1` if this type is not supported by `newarray`.
`int`
`slotSize()`
Returns the number of local variable index or operand stack depth consumed by this type.
`ClassDesc`
`upperBound()`
Returns the most specific upper bound field descriptor that can store any value of this type.
`static TypeKind`
`valueOf(String name)`
Returns the enum constant of this class with the specified name.
`static TypeKind[]`
`values()`
Returns an array containing the constants of this enum class, in the order they are declared.

### Methods declared in class Enum

`clone, compareTo, describeConstable, equals, finalize, getDeclaringClass, hashCode, name, ordinal, toString, valueOf`

### Methods declared in class Object

`getClass, notify, notifyAll, wait, wait, wait`

## Enum Constant Details

### BOOLEAN

public static final TypeKind BOOLEAN
The primitive type `boolean`. Its computational type is `int`. `0` represents `false`, and `1` represents `true`. It is zero-extended to an `int` when loaded onto the operand stack and narrowed by taking the bitwise AND with `1` when stored.

See Java Virtual Machine Specification:
  2.3.4 The `boolean` Type

### BYTE

public static final TypeKind BYTE
The primitive type `byte`. Its computational type is `int`. It is sign-extended to an `int` when loaded onto the operand stack and truncated when stored.

### CHAR

public static final TypeKind CHAR
The primitive type `char`. Its computational type is `int`. It is zero-extended to an `int` when loaded onto the operand stack and truncated when stored.

### SHORT

public static final TypeKind SHORT
The primitive type `short`. Its computational type is `int`. It is sign-extended to an `int` when loaded onto the operand stack and truncated when stored.

### INT

public static final TypeKind INT
The primitive type `int`.

### LONG

public static final TypeKind LONG
The primitive type `long`. It is of category 2.

### FLOAT

public static final TypeKind FLOAT
The primitive type `float`. All NaN values of `float` may or may not be collapsed into a single "canonical" NaN value in loading and storing.

### DOUBLE

public static final TypeKind DOUBLE
The primitive type `double`. It is of category 2. All NaN values of `double` may or may not be collapsed into a single "canonical" NaN value in loading and storing.

### REFERENCE

public static final TypeKind REFERENCE
A reference type.

See Java Virtual Machine Specification:
  2.4 Reference Types and Values

### VOID

public static final TypeKind VOID
The `void` type, for absence of a value. While this is not a data type, this can be a method return type indicating no change in operand stack depth.

See Java Virtual Machine Specification:
  4.3.3 Method Descriptors

## Method Details

### values

public static TypeKind[] values()
Returns an array containing the constants of this enum class, in the order they are declared.

Returns:
  an array containing the constants of this enum class, in the order they are declared

### valueOf

public static TypeKind valueOf(String name)
Returns the enum constant of this class with the specified name. The string must match exactly an identifier used to declare an enum constant in this class. (Extraneous whitespace characters are not permitted.)

Parameters:
  `name` - the name of the enum constant to be returned.
Returns:
  the enum constant with the specified name
Throws:
  `IllegalArgumentException` - if this enum class has no constant with the specified name
  `NullPointerException` - if the argument is null

### upperBound

public ClassDesc upperBound()
Returns the most specific upper bound field descriptor that can store any value of this type. This is the primitive class descriptor for primitive types and `void` and `Object` descriptor for `reference`.

Returns:
  the most specific upper bound field descriptor that can store any value of this type

### newarrayCode

public int newarrayCode()
Returns the code used by the `newarray` instruction to create an array of this component type, or `-1` if this type is not supported by `newarray`.

Returns:
  the code used by the `newarray` instruction to create an array of this component type, or `-1` if this type is not supported by `newarray`
See Java Virtual Machine Specification:
  6.5.newarray newarray
See Also:
  - `NewPrimitiveArrayInstruction`
  - `fromNewarrayCode(int)`

### slotSize

public int slotSize()
Returns the number of local variable index or operand stack depth consumed by this type. This is also the category of this type for instructions operating on the operand stack without regard to type (JVMS 2.11.1), such as `pop` versus `pop2`.

Returns:
  the number of local variable index or operand stack depth consumed by this type
See Java Virtual Machine Specification:
  2.6.1 Local Variables
  2.6.2 Operand Stacks

### asLoadable

public TypeKind asLoadable()
Returns the computational type for this type, or `void` for `void`.

Returns:
  the computational type for this type, or `void` for `void`
See Also:
  - `LoadInstruction`
  - `StoreInstruction`

### fromNewarrayCode

public static TypeKind fromNewarrayCode(int newarrayCode)
Returns the component type described by the array code used as an operand to `newarray`.

Parameters:
  `newarrayCode` - the operand of the `newarray` instruction
Returns:
  the component type described by the array code used as an operand to `newarray`
Throws:
  `IllegalArgumentException` - if the code is invalid
See Java Virtual Machine Specification:
  6.5.newarray newarray
See Also:
  - `NewPrimitiveArrayInstruction`
  - `newarrayCode()`

### fromDescriptor

public static TypeKind fromDescriptor(CharSequence s)
Returns the type associated with the specified field descriptor.

Parameters:
  `s` - the field descriptor
Returns:
  the type associated with the specified field descriptor
Throws:
  `IllegalArgumentException` - only if the descriptor is not valid

### from

public static TypeKind from(TypeDescriptor.OfField<?> descriptor)
Returns the type associated with the specified field descriptor.

Parameters:
  `descriptor` - the field descriptor
Returns:
  the type associated with the specified field descriptor