ヘンリー:
なぜJavaは、あなたがコメントアウト行のような何かを行うことはできませんか?
public static void example(Object other) {
if (!(other instanceOf Person)) {
return;
} else {
Person p = (Person) other;
System.out.println(p.name);
// System.out.println(other.name);
}
}
タイプはコンパイル時に知られなければならないので、私は、Javaが静的に型付けさを理解して、あなたが明示的にキャストする必要があります理由ですObject
へPerson
。しかし、プログラムをクラッシュさせたり、危険であるコメントアウト行に似た何かをするシナリオがありますか?入るためにすることを論理的であるelse
句を、タイプは人でなければならないので、なぜJavaはこのことを知っていないのですか?
これは安全ではないでしょう同様のシナリオの例は何ですか?
マイケル:
なぜそれができなかった論理的な理由は何もありません。言語は、ちょうどこのように設計されていません。それはあなたが後方互換性を壊すことなく追加することができるという特徴はありません、とJavaは常に後方互換性の優先順位をした - それはそれはとても成功したということの理由の一つです。
Kotlinは、あなたがこれを行うことができます(彼らはそれを呼び出すスマートキャスト)とKotlinは、Javaと同じバイトコードにコンパイルされます。Javaはそれを行うことができなかった理由を技術的にはありませんので、それだけでありません。
それは我々が最終的にこのような機能を得るかもしれない、と述べました。それはだ瞬間にだけ候補。提案された構文は次のようなものです:
if (x matches Integer i) {
// can use i here
}
そのように見えx
、同じとどまる、と新しい変数がi
指定した型で宣言されるだろう。