TIL

아이템 3 최대한 플랫폼 타입을 사용하지 말라

public class JavaTest {
	// @Nullable
	public String giveName() {
	 // ...
	}
}
val repo = UserRepo() // null을 뱉을 수 있는 자바 객체

val user1 = repo.user // User! (플랫폼 타입)
val user2: User = repo.user // User 타입
val user3: User? = repo.user // User? 타입
fun statedType() {
	val value: String = JavaClass().value // NPE
	println(value.length)
}

fun platformType() {
	val value = JavaClass().value
	println(value.length) // NPE
}
interface UserRepo {
	fun getUserName() = JavaClass().value
}

class RepoImp: UserRepo {
	override fun getUserName(): String? {
		return null
	}
}

fun main() {
	val repo: UserRepo = RepoUmpl()
	val text: String = repo.getUserName() // 런타임에 NPE
	print("${text.length}")
}

정리