Immutable

Class

Common
@MustBeDocumented
@Target(AnnotationTarget.CLASS)
@StableMarker
public annotation class Immutable

Immutable can be used to mark class as producing immutable instances. The immutability of the class is not validated and is a promise by the type that all publicly accessible properties and fields will not change after the instance is constructed. This is a stronger promise than val as it promises that the value will never change not only that values cannot be changed through a setter.

Immutable is used by composition which enables composition optimizations that can be performed based on the assumption that values read from the type will not change. See StableMarker for additional details.

data classes that only contain val properties that do not have custom getters can safely be marked as Immutable if the types of properties are either primitive types or also Immutable:

Marking Person immutable allows calls the PersonView androidx.compose.runtime.Composable function to be skipped if it is the same person as it was during the last composition.