Types

AutoKonfig includes the following types of properties:

Primitives

String

Type Delegate Getter Example
String StringSetting() getString() color = blue

Any property is guaranteed to be readable as a String.

Numbers

Type Delegate Getter Example
Int IntSetting() getInt() count = 8
Long LongSetting() getLong() max = 5000000000
Float FloatSetting() getFloat() half = 0.5
Double DoubleSetting() getDouble() pi = 3.141592
BigInteger BigIntegerSetting() getBigInteger() particles = 100000000000005
BigDecimal BigDecimalSetting() getBigDecimal() exact = 100000000000005.00002

Boolean

Type Delegate Getter Example
Boolean BooleanSetting() getBoolean() sync = yes
Boolean FlagSetting() getFlag() --verbose

The flag type is the same as a boolean type with a default value of false. It is intended as a convenience when reading command line flags (properties with no values).

The following values map to Boolean types:

True False
true false
yes no
on off
1 0

All others are considered false.

Info

Boolean values are case-insensitive.

Enums

Type Delegate Getter Example
Enum class EnumSetting(enum class) getEnum(enum class) direction = Right

The enum type support can be used to read any enum.

Usage:

enum class Letters {
    Alpha, Beta, Gamma
}
val letter by EnumSetting(Letters::class)

The enum values are not case sensitive.

Time

Instant

Type Delegate Getter Example
Instant InstantSetting() getInstant() start = 2020-02-03T10:15:30Z

An instant is a point in time, it is parsed using the ISO-8601 instant format.

Duration

Type Delegate Getter Example
Duration DurationSetting() getDuration() timeout = 10s

An amount of time. Can be suffixed by a unit, otherwise assumed to be in milliseconds. Whitespace is allowed between the number and the unit.

Unit Suffixes
Milliseconds ms, millis, milliseconds
Microseconds us, micros, microseconds
Nanoseconds ns, nanos, nanoseconds
Seconds s, second, seconds
Minutes m, minute, minutes
Hours h, hour, hours
Days d, day, days

Period

Type Delegate Getter Example
Period PeriodSetting() getPeriod() expiry = 7 days

A date-based amount of time. Can be suffixed by a unit, otherwise assumed to be in days. Whitespace is allowed between the number and the unit.

Unit Suffixes
Days d, day, days
Weeks w, week, weeks
Months m, month, months
Years y, year, years

LocalTime

Type Delegate Getter Example
LocalTime LocalTimeSetting() getLocalTime() backupTime = "10:30:00"

A time without a time zone. Only the hour and minute values are required (22:00), but seconds and nanoseconds can be specified (08:10:20.000000001).

Warning

A colon (:) can be used as a key/value separator, and so the value has to be quoted. If a file has the .properties extension, it is parsed in Java properties compatibility mode where it's also allowed without quoting.

LocalDate

Type Delegate Getter Example
LocalDate LocalDateSetting() getLocalDate() update = 2020-02-05

A date without a time zone.

LocalDateTime

Type Delegate Getter Example
LocalDateTime LocalDateTimeSetting() getLocalDateTime() update = "2020-01-09T10:30:00"

A date and time without a time zone. Parsed like a LocalDate and LocalTime, with the addition of a T delimeter.

Collections

Collections are lists or sets of values of any other type. To create a collection delegate or get a collection, a type has to be provided:

val numbers by ListSetting(IntSettingType)
val numbers = AutoKonfig.getList(IntSettingType)

Parsing rules are identical to rules for the element type, with comma (,) delimeters between elements and the array enclosed in square brackets ([, ]).

Tip

Setting type names are similar to delegate names, but have an additional Type suffix.

Info

Nested collections are also supported: AutoKonfig.getList(ListSettingType(IntSettingType))

Lists

Type Delegate Getter Example
List<type> ListSetting(type) getList(type) numbers = [1,2,3,1,2]

An ordered list of elements.

Sets

Type Delegate Getter Example
Set<type> SetSetting(type) getSet(type) selections = [1,2,3]

An unordered set of elements with duplicates ignored.

Bytes

Type Delegate Getter Example
Long BytesSetting() getBytes() cache = 512MB

A number of bytes. Can be suffixed by a unit, otherwise assumed to be in bytes. Whitespace is allowed between the number and the unit.

Decimal units

Unit Bytes Suffixes
Bytes 1 b, B, byte, bytes
Kilobytes 1000 kB, kilobyte, kilobytes
Megabytes 10002 MB, megabyte, megabytes
Gigabytes 10003 GB, gigabyte, gigabytes
Terabytes 10004 TB, terabyte, terabytes
Petabytes 10005 PB, petabyte, petabytes
Exabytes 10006 EB, exabyte, exabytes
Zettabytes 10007 ZB, zettabyte, zettabytes
Yottabytes 10008 YB, yottabyte, yottabytes

Binary units

Unit Bytes Suffixes
Bytes 1 b, B, byte, bytes
Kibibytes 1024 k, K, Ki, KiB, kibibyte, kibibytes
Mebibytes 10242 m, M, Mi, MiB, mebibyte, mebibytes
Gibibytes 10243 g, G, Gi, GiB, gibibyte, gibibytes
Tebibytes 10244 t, T, Ti, TiB, tebibyte, tebibytes
Pebibytes 10245 p, P, Pi, PiB, pebibyte, pebibytes
Exbibytes 10246 e, E, Ei, EiB, exbibyte, exbibytes
Zebibytes 10247 z, Z, Zi, ZiB, zebibyte, zebibytes
Yobibytes 10248 y, Y, Yi, YiB, yobibyte, yobibytes

Optional types

All delegates and getters have optional versions, which return null instead of throwing an exception for missing values.

They follow the format of OptionalXSetting() and getOptionalX(). For example: OptionalIntSetting() and getOptionalInt().