Calling Kotlin Code from Java Codelab
JVM Tags
@JvmStatic: When creating a singleton Kotlin class using the object keyword, the instance is created inside the class as <ClassName>.INSTANCE, unless we specify property or method as @JvmStatic, then we'll be able to access it the more typical way without the INSTANCE
@file:JvmName: When creating extensions in Kotlin, a new class name is created based on the file name for the JVM, such as StringUtilKt, unless we specify a name to use
@JvmOverloads: When using default values in a Kotlin method, we won't be able to access them in Java because it doesn't support defaults, unless we specify to the compiler to create all possible overload methods
@get:JvmName: When the compiler generates getters and setters for properties, it will prefix the name of the property with 'get' and 'set', but if a different name makes more sense, we can specify one
> with the notable exception of a property that begins with is, in which case the getter will have the same name
@JvmField: Default Kotlin behavior is to generate a getter and setter for each property, but in the case that we want the backer field to be directly available (i.e. user.displayName, over user.getDisplayName()), we can specify such
@Throws: Something something Java has checked exceptions and Kotlin doesn't, so declare them