
Int 는 널이 될 수 없는 타입이므로, Java에서의 int 로 쉽게 컴파일 가능Integer 으로 컴파일된다.toString ,  equals  , hashCode  메소드가 기본 구현 되어있다.Any 타입은 java.lang.Object 에 대응Object 인자를 받거나 반환하면, Kotlin에서는 Any 타입으로 취급한다.Any! 로 인식한다.interface Processor<T> {  
    fun process(): T  
}  
  
class NoResultProcessor: Processor<Unit> {  
    override fun process() {  
	    // ...
    }  
}
Unit 타입에 속한 값은 단 하나 뿐이며, 그이름도 Unit 이다.Unit 타입의 함수는 묵시적으로 return Unit 처럼 Unit 값을 반환한다.return Unit 을 넣어준다.Nothing 은 함수의 반환 타입이나 반환 타입으로 쓰일 타입 파라미터로만 쓸 수 있다.fun fail(message: String): Nothing {  
    throw IllegalStateException(message)  
}  
  
fun main(args: Array<String>) {  
    fail("Error occurred")  
}
// Exception in thread "main" java.lang.IllegalStateException: Error occurred
fun readNumbers(reader: BufferedReader): List<Int?> {  
    val result = ArrayList<Int?>()  
    for (line in reader.lineSequence()) {  
        val number = line.toIntOrNull()  
        result.add(number)  
    }  
    return result  
}
fun addValidNumbers(numbers: List<Int?>) {  
    val validNumbers = numbers.filterNotNull()  
    println("Sum of valid numbers: ${validNumbers.sum()}")  
    println("Invalid numbers: ${numbers.size - validNumbers.size}")  
}
fun main(args: Array<String>) {  
    val reader = BufferedReader(StringReader("1\nabc\n42"))  
    val numbers = readNumbers(reader)  
    addValidNumbers(numbers)  
}
// Sum of valid numbers: 43
// Invalid numbers: 1
| Collection Type | Immutable | Mutable | 
|---|---|---|
| List | listOf | mutableListOf, arrayListOf | 
| Set | setOf | mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf | 
| Map | mapOf | mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf | 
자바 코드에서 정의한 타입을 코틀린 컴파일러는 플랫폼 타입으로 간주한다.
컬렉션 타입이 Signature에 들어간 자바 메소드 구현을 할때, Kotlin에서 사용할 컬렉션 타입을 선택해야 한다.
1. 컬렉션 자체가 널이 될 수 있는가?
2. 컬렉션의 원소가 널이 될 수 있는가?
3. 컬렉션이 Mutable한가?
fun main(args: Array<String>) {  
    println(arrayOf(1, 2, 3, 4).contentToString())  
    println(arrayOfNulls<Int>(5).contentToString())  
    println(Array(5) { it + 1 }.contentToString())  
  
    println(intArrayOf(1,2,3).contentToString())  
    println(IntArray(4).contentToString())  
    println(IntArray(5) { it * it }.contentToString())  
}
// [1, 2, 3, 4]
// [null, null, null, null, null]
// [1, 2, 3, 4, 5]
// [1, 2, 3]
// [0, 0, 0, 0]
// [0, 1, 4, 9, 16]
toTypedArray()fun main(args: Array<String>) {  
    val strings = listOf("a", "b", "c")  
    println("%s/%s/%s".format(*strings.toTypedArray()))  
}
varargfun main(args: Array<String>) {  
    println(customList(listOf(2, 3, 4)))  // 10
    println(customVarg(1, 2, 3))          // 7  
}  
  
  
fun customList(list: List<Int>) = customVarg(*list.toIntArray())  
  
fun customVarg(vararg args: Int) = customVararg2(1, *args)  
  
fun customVararg2(vararg args: Int) = args.sum()
*Array<T>,  IntArray, LongArray, DoubleArray. ByteArray, CharArray, ShortArray FloatArray, StringArray, BooleanArrayArray 에만 사용 가능List 의 경우 toArray 메서드 적용 후, 사용 가능fun main(args: Array<String>) {
	val list = listOf("args", *args)
	println(list)
}