Some Guava features were really useful for Java 7 application because Guava was bringing APIs missing in the JDK. The introduction of Kotlin and
Java 8+ fixed some of these limitations. When migrating an application to Kotlin and/or using a Java 8+ target, it is recommended to prefer the
provided native APIs over Guava to ease maintenance: developers don’t need to learn how to use two APIs and can stick to the default one.
This rule raises an issue when the Guava APIs listed below are used.
Guava API |
Kotlin API |
com.google.common.base.Joiner.on
|
kotlin.collections.Iterable.joinToString or kotlin.Array.joinToString
|
com.google.common.base.Predicate
|
Use function with type (T) → Boolean as a replacement for Predicate<T> |
com.google.common.base.Function
|
Use function with type (T) → R as a replacement for Function<T, R> |
com.google.common.base.Supplier
|
Use function with type () → T as a replacement for Supplier<T> |
com.google.common.io.Files.createTempDir
|
kotlin.io.path.createTempDirectory
|
com.google.common.collect.ImmutableSet.of
|
kotlin.collections.setOf
|
com.google.common.collect.ImmutableList.of
|
kotlin.collections.listOf
|
com.google.common.collect.ImmutableMap.of
|
kotlin.collections.mapOf
|
Guava API |
Java 8 API |
com.google.common.io.BaseEncoding.base64
|
java.util.Base64
|
com.google.common.io.BaseEncoding.base64Url
|
java.util.Base64
|
com.google.common.base.Optional
|
java.util.Optional *
|
com.google.common.base.Optional.of
|
java.util.Optional.of *
|
com.google.common.base.Optional.absent
|
java.util.Optional.empty *
|
com.google.common.base.Optional.fromNullable
|
java.util.Optional.ofNullable *
|
*: Note that this rule will also raise issues for the use of Guava Optional
and recommend using the Java 8+ equivalent instead. In
most Kotlin-only cases, you will probably be better off using Kotlin’s null-safe type system directly, without wrapping Optional
constructs. In some cases, such as those involving Java interoperability, it may be necessary to use Optional
in Kotlin, however.