2017-12-09 13 views
2

를 잡을 필요하지 않습니다왜 코 틀린 시도하고 예를 들어 명시 적으로

FileOutputStream("file") 

가 코 틀린 컴파일,하지만 자바는 컴파일러 오류를 줄 것이다. 왜?

+5

https://kotlinlang.org/docs/reference/exceptions.html # checked-exceptions –

+0

Kotlin에는 C# 및 다른 언어에서와 마찬가지로 확인 된 예외가 없습니다. – Moira

+0

Kotlin 제작자의 목표는 _popular_ 언어를 만드는 것입니다. 그래서 그들은 많은 문법적 설탕을 넣고 초보자들을 혼란스럽게 할 수있는 모든 것을 희생합니다. 그리고 확인 된 예외는 종종 초보자를 괴롭게합니다. – user882813

답변

2

Kotlin은 Java의 검사 예외를 제거합니다. 컴파일 타임에 체크되고 메서드 시그니처에 선언 된 예외는 비록 Java 개발자들에게는 친숙하지만 널리 퍼진 실험 인 outside과 어느 정도는 Java 커뮤니티 인 inside으로 간주됩니다.

그래서 코 틀린 멀리 그들과 함께했고, 자바 7의 try-with-resources에 대한 .use 방법 속기와 자원을 (같은 FileOutputStream) 사용과 관련된 상용구의 일부.

+0

그래서 사전에 발생한다는 것을 몰랐다면 그 예외를 처리하는 적절한 방법은 무엇입니까? –

+1

Kotlin에서 사용되는 Java 클래스의 경우 인터페이스 메소드 서명 또는 Javadoc을 간단하게 확인할 수 있습니다. 복구하려는 일부 예외가있을 수 있으며 스레드를 죽일 수있는 다른 예외가있을 수 있습니다. 위에서 언급했듯이,'FileOutputStream (File ("path")). use {...}'는 당신이 찾고있는 것 같다. –

0

일부 의견을 간섭하지 않으면 대답하기 어려울 수 있습니다. 난 그냥 코 틀린이 큰 소프트웨어 프로젝트를 대상으로 말과 (https://kotlinlang.org/docs/reference/exceptions.html에서)에 관한 코 틀린 팀 주장이 예외를 확인 무엇을 줄 것이다 :

검사 예외

코 틀린 체크 예외가 않습니다 없습니다. 에는 여러 가지 이유가 있지만 간단한 예를 제공합니다.

다음 StringBuilder 클래스가 구현하는 JDK 예 인터페이스이다

(의 CharSequence CSQ)가 IOException이 발생

Appendable에 APPEND; 이 서명은 무엇이라고 말합니까? 그것은 내가 문자열을 (StringBuilder, 일종의 로그, 콘솔 등)에 추가 할 때마다 IOObceptions를 잡아야한다고 말합니다. 왜? 이 IO 수행 할 수 있기 때문에 (작가 을 또한 Appendable에 구현) ... 그래서 여기 저기 코드 모든 이런 종류의에 결과 :

try { 
    log.append(message) 
} 
catch (IOException e) { 
    // Must be safe 
} 

그리고 이것은, Effective Java을 볼 좋지 않습니다, 항목 65 : 돈 ' 예외를 무시하십시오.

브루스 에켈 (Bruce Eckel)는 Does Java need Checked Exceptions? 말한다 : 작은 프로그램의

시험 코드 품질을 향상 개발자의 생산성을 향상시키고 수 모두 예외 사양을 요구하는 결론에 이르게하지만, 대규모 소프트웨어 프로젝트 경험이 는 제안 다른 결과 - 생산성 저하 및 코드 품질의 향상이 거의 또는 전혀 없음 이런 종류의

다른 인용 :

Java's checked exceptions were a mistake (로드 Waldhoff)

The Trouble with Checked Exceptions (앤더스 헤 즐스 버그)