2017-12-09 7 views
2

をキャッチする必要はありません。なぜKotlinは試してみて、例えば、明示的に

FileOutputStream("file") 

はKotlinでコンパイルしますが、Javaでは、それはコンパイルエラーを与えるだろう。どうして?

+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と広くみなされます。

だから、Kotlinは彼らと、およびJava 7のtry-with-resourcesため.use方法の速記でリソース(FileOutputStreamなど)を使用して関連付けられた定型の一部を廃止しました。

+0

私はそれらが事前に発生することを知らなかったらこれらの例外を処理する適切な方法は何でしょうか? –

+1

Kotlinで使用されるJavaクラスの場合は、インタフェースメソッドのシグネチャまたはJavadocをチェックするだけです。あなたが回復したいいくつかの例外とあなたのスレッドを殺すようにしたいものがあるかもしれません。前述のように、 'FileOutputStream(File(" path "))。use {...}'はあなたが探しているものです。 –

0

意見を聞かせずに答えることは難しいかもしれません。私はちょうどKotlinは、大規模なソフトウェアプロジェクトを目指していると言うと(https://kotlinlang.org/docs/reference/exceptions.htmlから)に関するKotlinチームのクレームはチェック例外何を与える:

チェック例外

Kotlinはチェック例外を持っていないではありません。 には多くの理由がありますが、簡単な例を示します。

は以下 StringBuilderクラスによって実装されるJDKの例示的なインターフェースである:

(たCharSequenceのCSQ)がIOExceptionをスロー

追加可能追記。この の署名は何を表していますか?それは私が (StringBuilder、何らかのログ、コンソールなど)に何か文字列を追加するたびに、私はこれらのIOExceptionを で捕まえなければならないと言います。どうして? (ライター も追加可を実装して)、それはIOを実行される可能性がありますので...それはこの種のコードの中に場所を超えるすべての を結果だから:ドン」:

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

そして、これはよくない、Effective Java、項目65を参照してください 例外を無視します。

ブルースEckel氏はDoes Java need Checked Exceptions?で述べている:小さなプログラムの

審査は、コードの品質を向上させる開発者の生産性を向上させ、 可能性の両方 例外仕様を必要とするという結論につながりますが、大規模なソフトウェアプロジェクトの経験が が示唆します異なる結果 - 生産性の低下とコード品質の増加がほとんどまたは全くありません。この種の

その他の引用:

Java's checked exceptions were a mistake(ロッドWaldhoff)

The Trouble with Checked Exceptions(アンダース・ヘルスバーグ)

関連する問題