Kotlin
What are data classes?
Data classes are used to hold data. You do not need to explicitly write constructors, getters, equals()
, hashCode()
, copy()
, toString()
, etc; the compiler will generate them.
For example:
data class Foo(val field1: String, val field2: Int)
How to avoid NullPointerException in Kotlin?
- by default variable are non-nullable; to make it nullbale, add
?
, e.g.var a: String?
. - use Safe Call operator (
?.
):foo?.bar()
, iffoo
isnull
, returnnull
instead of throwing NPE. - use Elvis operator (
?:
):foo ?: bar
, iffoo
is not null, returnfoo
, otherwise returnbar
.
If you want to throw an NPE:
- use Not Null Assertion Operator (
!!
):str!!.length
, ifstr
isnull
, throw a NPE. - An explicit call to
throw NullPointerException()
What's the difference between a primary constructor and secondary constructors?
- A Kotlin class can have ONE primary constructor and ONE or MORE secondary constructors.
- The primary constructor is a part of the class header:
class Person constructor(firstName: String) {}
, orclass Person(firstName: String) {}
(If the primary constructor does not have any annotations or visibility modifiers, the constructor keyword can be omitted).
- If the class has a primary constructor, each secondary constructor needs to delegate to the primary constructor, either directly or indirectly through another secondary constructor(s).
What's the difference between lateinit and lazy?
lateinit var
delays the initialization to a later time; it can be initialized anywhere in the program; could have multiple initializations; not thread-safe; onlyvar
; primitive type not allowed. Use it if properties are mutable.lazy
initializes the object only when it is used; it can only be initialized by initializer lambda; only a single initialization; thread-safe; can useval
; allow on primitive type properties.
What is a suspend function?
Suspend function: a function that may be started, halted, then resumed. delay()
function is an example of suspend function.
What is sealed class?
Sealing allows classes and interfaces to define their permitted subtypes. A class or an interface can now define which classes can implement or extend it. The main motivation behind sealed classes is to have the possibility for a superclass to be widely accessible but not widely extensible.
Where is the main class?
Suppose HelloWorld.kt
has the following code, the main()
is not in a class, what is the "main class"?
package com.example
fun main() {
println("Hello, World!")
}
It turns out that the compiler wraps it in a class, and the main class is com.example.HelloWorldKt
.
Kotlin vs Java
https://kotlinlang.org/docs/comparison-to-java.html
Java has primitive types, Kotlin does not