9

在 Java中理论上你只能抛出Throwables.

这是语言允许的,并在类加载期间进行检查。但是如果你禁用类检查

java -Xverify:none -cp . BadClassThatCompiles

然后你可以运行一个抛出任何类(不是派生自Throwable)的类(示例

为什么?

为什么要这样设计......意味着一个允许抛出对象的虚拟机和一个必须过滤掉错误代码的验证器。好像某些代码可能是错误的。不是代码,是设计!

为什么?

4

1 回答 1

4

为什么要这样设计......意味着一个允许抛出对象的虚拟机和一个必须过滤掉错误代码的验证器。好像某些代码可能是错误的。不是代码,是设计!

为什么?

仅仅是因为该设计几乎可以从所有角度进行工作。

那么替代方案是什么?

我想你必须有一种特殊的“东西”,它们不是为被抛出而设计的类的实例。

这将需要:

  • 定义这些异常非对象的新语法
  • 一套全新的打字规则来处理这些非对象(例如它们不能是赋值兼容的对象......)
  • 等等。

归根结底,Java 语言会更复杂,程序员也更难使用。为了什么目的?稍微简化验证者的任务?

对不起,但如果你把它归结为合乎逻辑的结论,这个想法是行不通的。


坦率地说,谁在乎你是否可以通过禁用验证器来破坏 JVM。这就像抱怨如果你玩上膛的手枪,你可以射击自己。

于 2013-03-04T11:19:34.133 回答