Skip to main content

Type Mappings

How Avro types map to JVM types across languages.

Primitive Types​

Avro TypeJavaKotlinScala
nullVoidNothing?Null
booleanbooleanBooleanBoolean
intintIntInt
longlongLongLong
floatfloatFloatFloat
doubledoubleDoubleDouble
bytesbyte[]ByteArrayArray[Byte]
stringStringStringString

Logical Types​

Avro Logical TypeJavaKotlinScala
uuidUUIDUUIDUUID
dateLocalDateLocalDateLocalDate
time-millisLocalTimeLocalTimeLocalTime
time-microsLocalTimeLocalTimeLocalTime
timestamp-millisInstantInstantInstant
timestamp-microsInstantInstantInstant
local-timestamp-millisLocalDateTimeLocalDateTimeLocalDateTime
local-timestamp-microsLocalDateTimeLocalDateTimeLocalDateTime
decimal(p, s)BigDecimalBigDecimalBigDecimal
decimal(p, s) (precise)DecimalP_SDecimalP_SDecimalP_S

Complex Types​

Avro TypeJavaKotlinScala
recordrecorddata classcase class
enumenumenum classenum
array<T>List<T>List<T>List[T]
map<T>Map<String, T>Map<String, T>Map[String, T]
fixed(n)byte[]ByteArrayArray[Byte]

Optional Types​

Avro UnionJavaKotlinScala
["null", "T"]Optional<T>T?Option[T]
["null", "string"]Optional<String>String?Option[String]
["null", "long"]Optional<Long>Long?Option[Long]

Complex Unions​

Avro UnionGenerated Type
["string", "int"]StringOrInt (sealed interface)
["string", "int", "boolean"]StringOrIntOrBoolean
["null", "string", "int"]Optional<StringOrInt> / StringOrInt? / Option[StringOrInt]

Wrapper Types​

With x-typr-wrapper annotation:

Base TypeWrapper (Java)Wrapper (Kotlin)Wrapper (Scala)
stringrecord Foo(String value)value class Foo(val value: String)opaque type Foo = String
longrecord Foo(long value)value class Foo(val value: Long)opaque type Foo = Long
uuidrecord Foo(UUID value)value class Foo(val value: UUID)opaque type Foo = UUID

Records​

FeatureJavaKotlinScala
Base typerecorddata classcase class
ImmutableYesYesYes
Pattern matchingYes (21+)YesYes
Copy/witherwithField()copy()copy()

Enums​

FeatureJavaKotlinScala
Base typeenumenum classenum
Ordinal accessordinal()ordinalordinal
Name accessname()nametoString

Sealed Interfaces (Multi-Event Topics)​

FeatureJavaKotlinScala
Interfacesealed interfacesealed interfacesealed trait
Exhaustive matchingYes (21+)YesYes
Permits clauseExplicitImplicitImplicit