9

Java では、理論的には のみをスローできThrowablesます。

これは言語によって許可されており、クラスのロード中にチェックされます。しかし、クラスチェックを無効にすると

java -Xverify:none -cp . BadClassThatCompiles

次に、任意のクラス ( から派生していない)をスローするクラスを実行できますThrowable()

なんで?

なぜこのように設計されているのですか..オブジェクトをスローできる仮想マシンと、間違ったコードを除外する必要があるベリファイアを意味します。あたかも一部のコードが間違っている可能性があるかのように。コードじゃなくてデザイン!

なんで?

4

1 に答える 1

4

なぜこのように設計されているのですか..オブジェクトをスローできる仮想マシンと、間違ったコードを除外する必要があるベリファイアを意味します。あたかも一部のコードが間違っている可能性があるかのように。コードじゃなくてデザイン!

なんで?

単純に、デザインがほぼすべての観点から機能するからです。

さて、代替案は何でしょうか?

スローされることのみを目的として設計されたクラスのインスタンスではない、特別な種類の「もの」が必要になると思います。

それには次のものが必要です。

  • これらの例外非オブジェクトを定義するための新しい構文
  • これらの非オブジェクトを処理するためのまったく新しい型付け規則のセット (たとえば、代入互換のオブジェクトにすることはできません ...)
  • 等々。

結局のところ、Java 言語はより複雑になり、プログラマにとって使いにくくなります。そして、何のために?検証者のタスクを少し単純化するには?

申し訳ありませんが、論理的な結論から言えば、このアイデアは初心者ではありません。


率直に言って、ベリファイアを無効にすることで JVM を破壊できるかどうかなど、誰が気にしますか。装填されたピストルをジャグリングすると自分を撃つことができると不平を言うようなものです。

于 2013-03-04T11:19:34.133 に答える