# Interface BranchInstruction

All Superinterfaces:
  `ClassFileElement, CodeElement, Instruction`

public sealed interface BranchInstruction extends Instruction
Models a branching instruction (conditional or unconditional) in the `code` array of a `Code` attribute. Corresponding opcodes have a kind of `Opcode.Kind.BRANCH`. Delivered as a `CodeElement` when traversing the elements of a `CodeModel`.

A branch instruction is composite:

    BranchInstruction(
        Opcode opcode,
        Label target
    )

Due to physical restrictions, some types of instructions cannot encode labels too far away in the list of code elements. In such cases, the `ClassFile.ShortJumpsOption` controls how an invalid branch instruction model is written by a `CodeBuilder`.

Since:
  24
See Also:
  - `Opcode.Kind.BRANCH`
  - `CodeBuilder::branch`
  - `ClassFile.ShortJumpsOption`

## Method Summary

Modifier and Type
Method
Description
`static BranchInstruction`
`of(Opcode op, Label target)`
Returns a branch instruction.
`Label`
`target()`
Returns the branch target of this instruction.

### Methods declared in interface Instruction

`opcode, sizeInBytes`

## Method Details

### target

Label target()
Returns the branch target of this instruction.

Returns:
  the branch target of this instruction

### of

static BranchInstruction of(Opcode op, Label target)
Returns a branch instruction.

Parameters:
  `op` - the opcode for the specific type of branch instruction, which must be of kind `Opcode.Kind.BRANCH`
  `target` - the target of the branch
Returns:
  a branch instruction
Throws:
  `IllegalArgumentException` - if the opcode kind is not `Opcode.Kind.BRANCH`