TL; DR : 특별한 구문이없고 함수일뿐입니다
Java와 달리 Kotlin에는 이에 대한 특별한 구문이 없습니다. 대신 try-with-resources 가 표준 라이브러리 함수로 제공됩니다 use
.
FileInputStream("filename").use { fis -> //or implicit `it`
//use stream here
}
use
구현
@InlineOnly
public inline fun <T : Closeable?, R> T.use(block: (T) -> R): R {
var closed = false
try {
return block(this)
} catch (e: Exception) {
closed = true
try {
this?.close()
} catch (closeException: Exception) {
}
throw e
} finally {
if (!closed) {
this?.close()
}
}
}
이 함수는 모든 Closeable?
유형 에서 일반 확장으로 정의됩니다 . Java SE7 부터 리소스 를 사용해 볼 수있는 Closeable
Java 인터페이스 입니다 .
이 함수 는 에서 실행되는 함수 리터럴 을 사용합니다 . 와 동일 시도 -과 - 자원 자바의가 됩니다 폐쇄 A의 .
block
try
Closeable
finally
또한 내부에서 발생하는 실패 block
는 close
실행 으로 이어지는데, 예외를 무시함으로써 가능한 예외가 문자 그대로 "억제"됩니다. 이것은 다른 시도 -과 - 자원 과 같은 예외가에서 요구 될 수 있기 때문에, 자바 의 솔루션입니다.
사용 방법
use
확장은 볼 수 Closeable
독자 등등, 즉 스트림을 입력합니다.
FileInputStream("filename").use {
//use your stream by referring to `it` or explicitly give a name.
}
둥근 괄호 안의 부분하게 무엇인가 block
에 use
(람다 여기서 인수로 전달된다). 블록이 완료된 후 FileInputStream
닫혔 는지 확인할 수 있습니다 .