2017-12-23 12 views
3

Kotlin Website Link코 틀린 웹 사이트의 "단위를 반환 방법 빌더 스타일의 사용은"나에게

웹 사이트 말했다
"단위를 반환 방법 빌더 스타일 사용"

fun arrayOfMinusOnes(size: Int): IntArray { 
    return IntArray(size).apply { fill(-1) } 
} 

으로 혼동 함수 "apply"는 제네릭 형식을 반환하고 Unit은 Java에서 void와 같다고 생각하므로 void 메서드를 빌더 스타일로 사용하면 이해가되지 않습니다. 이 유형 Unit하지 IntArray의 때문에,

return IntArray(size) 
    .fill(-1) 

다음은 컴파일되지 것입니다 :

답변

4

그것을 만들려고 노력하는 것 요점은 그냥이 같은 전통적인 자바 빌더 스타일을 한 경우이다. 그래서 전통적으로, 당신은 이런 식으로 뭔가를해야 할 것 :

val ret = IntArray(size) 
ret.fill(-1) 
return ret 

apply하면이를 방지 할 수 있습니다, 반환 형식은 (일반적으로, 또는 T) 여전히 유형 IntArray의 때문이다.

+0

그래서 빌더가 유지할 수있는 것보다 "void"메소드의 래퍼 (wrapper)로 "적용"함수를 사용하는 것을 의미합니까? – ShangXubin

+0

@ShangXubin -'apply'는 많은 수의 메소드를 감쌀 수 있지만 항상 객체를 반환합니다. –

1

이 하나 가지고 다음 apply 기능은 속성을 설정 한 후 X의 인스턴스를 반환하는 데 사용됩니다

class X { 
    var a: Int? = null 
    var b: Int? = null 
    fun first(a: Int) = apply { this.a = a } 
    fun second(b: Int) = apply { this.b = b } 
} 

X().first(2).second(3) 

. 이것은 두 메소드의 빌더 스타일 호출을 가능하게합니다. apply이 제거 된 경우 함수는 Unit을 반환합니다.