# Interface ConvertInstruction

All Superinterfaces:
  `ClassFileElement, CodeElement, Instruction`

public sealed interface ConvertInstruction extends Instruction
Models a primitive conversion instruction in the `code` array of a `Code` attribute, such as `i2l`. Corresponding opcodes have a kind of `Opcode.Kind.CONVERT`. Delivered as a `CodeElement` when traversing the elements of a `CodeModel`.

A primitive conversion instruction is composite:

    ConvertInstruction(
        TypeKind fromType,
        TypeKind toType
    )

where these conversions are valid:

- Between `int`, `long`, `float`, and `double`, where `fromType != toType`;
- From `int` to `byte`, `char`, and `short`.

Since:
  24
See Also:
  - `Opcode.Kind.CONVERT`
  - `CodeBuilder::conversion`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `TypeKind`
  `fromType()`
  Returns the source type to convert from.
  `static ConvertInstruction`
  `of(Opcode op)`
  Returns a conversion instruction.
  `static ConvertInstruction`
  `of(TypeKind fromType, TypeKind toType)`
  Returns a conversion instruction.
  `TypeKind`
  `toType()`
  Returns the destination type to convert to.

  ### Methods declared in interface Instruction

  `opcode, sizeInBytes`
  Modifier and Type
  Method
  Description
  `Opcode`
  `opcode()`
  Returns the operation of this instruction.
  `int`
  `sizeInBytes()`
  Returns the size in bytes of this instruction.

- ## Method Details

  - ### fromType

    TypeKind fromType()
    Returns the source type to convert from.
    Returns:
      the source type to convert from

  - ### toType

    TypeKind toType()
    Returns the destination type to convert to.
    Returns:
      the destination type to convert to

  - ### of

    static ConvertInstruction of(TypeKind fromType, TypeKind toType)
    Returns a conversion instruction. Valid conversions are:
    - Between `int`, `long`, `float`, and `double`, where `fromType != toType`;
    - From `int` to `byte`, `char`, and `short`.
    Parameters:
      `fromType` - the type to convert from
      `toType` - the type to convert to
    Returns:
      a conversion instruction
    Throws:
      `IllegalArgumentException` - if this is not a valid conversion

  - ### of

    static ConvertInstruction of(Opcode op)
    Returns a conversion instruction.
    Parameters:
      `op` - the opcode for the specific type of conversion instruction, which must be of kind `Opcode.Kind.CONVERT`
    Returns:
      a conversion instruction
    Throws:
      `IllegalArgumentException` - if the opcode kind is not `Opcode.Kind.CONVERT`.