Warum kannst du irgendetwas in Java werfen? [geschlossen]

9

In Java theoretisch können Sie nur Throwables werfen.

Dies wird von der Sprache erlaubt und beim Laden der Klasse überprüft. Aber wenn Sie die Klassenprüfung deaktivieren

%Vor%

Dann können Sie eine Klasse ausführen, die jede -Klasse (nicht abgeleitet von Throwable ) ( Beispiel) auslöst )

Warum?

Warum ist es so konzipiert? Dies bedeutet eine virtuelle Maschine, die es erlaubt, Objekte zu werfen und einen Verifizierer, der falschen Code herausfiltern muss. Als ob irgendein Code falsch sein könnte . Es ist nicht der Code, es ist das Design!

Warum?

    
Johanes Matian 04.03.2013, 11:05
quelle

1 Antwort

4
  

Warum ist es so konzipiert? Dies bedeutet eine virtuelle Maschine, die es erlaubt, Objekte zu werfen und einen Verifizierer, der falschen Code herausfiltern muss. Als ob irgendein Code falsch sein könnte. Es ist nicht der Code, es ist das Design!

     

Warum?

Ganz einfach, weil das Design aus fast allen Perspektiven funktioniert.

Nun, was wäre die Alternative?

Ich denke, du müsstest eine besondere Art von "Dingen" haben, die KEINE Instanzen von Klassen sind, die nur zum Zweck des Werfens entworfen wurden.

Das würde erfordern:

  • eine neue Syntax zum Definieren dieser Ausnahme Nicht-Objekte
  • ein ganz neuer Satz von Typisierungsregeln, um diese Nicht-Objekte zu behandeln (zum Beispiel können sie nicht zuordnungskonformes Objekt sein ...)
  • und so weiter.

Am Ende des Tages wäre die Java-Sprache komplexer und für den Programmierer schwieriger zu verwenden. Und zu welchem ​​Zweck? Um die Aufgabe des Verifizierers etwas zu vereinfachen?

Entschuldigung, aber wenn Sie es zu seiner logischen Schlussfolgerung bringen, ist diese Idee ein Nichtstarter.

Und ehrlich gesagt wen interessiert's , wenn Sie die JVM durch Deaktivieren des Verifizierers brechen können. Es ist wie beschweren, dass Sie sich schießen können, wenn Sie geladene Pistolen jonglieren.

    
Stephen C 04.03.2013 11:19
quelle

Tags und Links