Java nach Vulkanausbruch

Ein sarkastischer Arbeitgeber hat mich gebeten, Java zu verbessern, und obwohl ich nicht der Präsident von Indonesien bin, habe ich das schnell getan, sodass ich einen halben Tag lang aus Versehen verwirrt bin. Das würde mir gefallen Das allgemeine Prinzip ist maximale Vereinfachung ohne Verlust der logischen Kontrolle. Dazu ist es natürlich notwendig, der Sprache nicht nur hinzuzufügen, was nicht vorhanden war, sondern auch, um viel von dem zu entfernen, was dort war, und die gute Tradition von C-- fortzusetzen.


  1. Die Möglichkeit, mehr als ein Ergebnis einer Funktion zurückzugeben.
  2. Die Standardwerte von primitiven Feldern müssen explizit deklariert werden. Der Modifikator "statisch" wird aus der Sprache entfernt, und die Standardinstanz ist als statische Instanz verfügbar, auf die über eine typisierte Null zugegriffen werden kann. Nennen Sie es alle "Standardinstanz". Die Möglichkeit des "abstrakten" Modifizierers für Felder, der sowohl die Unmöglichkeit der Erstellung einer Instanz einer Klasse als auch die Angabe des Standardwerts dieses Feldes in der Nachkommenschaft der Klasse bedeutet.
  3. Für die Felder "protected", "default" und "public" wird die automatische Generierung von Setters und Getter durch den Compiler ohne automatische Generierung sichtbarer Sortierungen, aber mit der Möglichkeit der Überladung, "private" aus der Sprache entfernt, da die Felder selbst alle "privat" sein werden Überlastfähigkeit. Fügen Sie "local" hinzu - dazu in Absatz 8.
  4. Autogenerierung öffentlicher Schnittstellen aus allen "öffentlichen" Klassenfeldern sowie eine neue Art von geschütztem usw. Schnittstellen aus den Feldern, die dem Modifikator entsprechen. Klassentypen werden durch Hash-Code verglichen, der anhand von Feldnamen, Argumentnamen, Typen und Rückgabewerten generiert wird, da die Wahrscheinlichkeit der Übereinstimmung all dieser Werte unbedeutend ist und während des Kompilierens mit Warnungen erkannt werden kann.

    Daher ist „Schnittstelle“ als solche nicht mehr erforderlich, nur „Klasse“, „abstrakt“ ist nur eine Anweisung, die die Erstellung einer Instanz verbietet. Über Mehrfachvererbung - im nächsten Absatz 5.
  5. Fügen Sie Zusammenführungsregeln für Erweiterungen hinzu. Geben Sie explizit den Vorfahren für alle in Konflikt stehenden Felder an, die in Absatz 8 nicht von den Methoden unterschieden werden können. Infolgedessen erbt das Objekt den Code und implementiert alle übergeordneten Typen. Typen, die aufgrund von Merge nicht vollständig beibehalten werden, werden einfach von den formalen Vorfahren entfernt, wobei der Code verlassen wird. Beim Versuch, das Objekt zu missbrauchen, wird jedoch ein Kompilierungsfehler erzeugt.
  6. Dynamische Typen Vorlagen wie in C, aber nicht als Zheneriksy in Java. Darunter leidet die Typisierung nicht, da dynamische Typen nicht direkt in der Sortierung verwendet werden können, sondern in allen Fällen verwendet werden können, wenn Basistypen oder Reflektionen oder Vorlagen verwendet werden, in denen es auch nicht schwierig ist, die Entwicklung mit einer Instanztyp-Erweiterung, der Laufzeit direkt oder der Einschränkung auf Ablehnung, zu organisieren.
  7. Submethoden wie in Pascal.
  8. Alle Methoden sind vollwertige Standardinstruktionen interner Klassen und können nicht von Feldern unterschieden werden. Dazu wird vom Klassenkonstruktor ein Wert zurückgegeben. Der Klassenkonstruktor ist der Hauptteil der Standardmethode, die zur Kompilierungszeit gemäß Klausel 2 der „Standardinstanzen“ erstellt wird. Sie benötigen keine speziellen Verweise auf eine Methode mehr, wie in Java 8. Eine Methodenreferenz bedeutet eine Objektreferenz.

    Das Aufrufen einer Methode und das Erstellen eines temporären Objekts nur für das Aufrufen einer internen Methode wird identisch, all dies kann vom Compiler als einfacher Methodenaufruf optimiert werden. Andererseits bedeutet die Erstellung einer "Methode" durch den "neuen" Operator für spätere Manipulationen mit einem Verweis darauf die Erstellung einer neuen Instanz einer "Klasse". Zuweisen einer Funktionsreferenz zu einem Feld - direkt über den Methodennamen ohne Klammern, Funktionswerte - mit Klammern und Argumenten. Felder mit dem Modifikator "local" werden nicht zwischen Methodenaufrufen gespeichert.

    Alle identischen Methoden mit unterschiedlichen Argumenten müssen in einer Unterklasse gruppiert werden, um die äußere Klasse zu löschen. Die Standardfelder einer solchen Unterklasse werden dementsprechend nicht absolut statisch, sondern statisch in Bezug auf die externe Klasse. Außer für den Fall, dass die externe Klasse selbst eine Standardinstanz ist.
  9. Anstelle von "try" - "catch" gibt es auch Methoden. "Throw" gibt den zulässigen Typ der aufrufenden Methode an. "Throw" macht die Handler-Methode und den Callstack ab. Die Handler-Methoden selbst unterscheiden sich nicht es stellt sich also heraus, dass in einer der vorherigen aufrufenden Methoden. Dementsprechend wird der Handler wie bei try-catch auf der nächstgelegenen Ebene der Hierarchie aufgerufen. Wenn Sie also in bestimmten Ausnahmefällen nach einer bestimmten Methode durch einen bestimmten Code springen, müssen Sie diesen Code mit dieser bestimmten Methode am Anfang in eine Submethodenklasse einfügen, in der die erforderlichen Handler überladen werden. Dieser Ansatz wird die langen, wenn nicht weniger, Methoden realer Java-Projekte erheblich verkürzen.

    "Zum Schluss" fügen Sie den Anhang der Methode am Ende ohne zusätzliche Klammern hinzu.
  10. Neuer Operator zur Laufzeit verschlüsselt alle Arten von Primitiven und Arrays von Primitivfeldern und String und komprimiert sie im Speicher für den späteren Abruf mit einem Zugriffsschlüssel, und zwar für die gesamte Klasseninstanz. Damit Sie nur ein Pack-Use-Pack in einer Methode auspacken möchten, anstatt sich den Kopf zu "kratzen", wie man es besser macht.
  11. Arrays benötigen nur während des Schreibens die Grenzkontrolle, und ich würde die Möglichkeit geben, direkt aus dem Speicher zu lesen, ohne die Array-Grenzen zu kontrollieren. Bei Vorhandensein von System.arraycopy werden die Arraygrenzen daher ohne Beeinträchtigung der Leistung überwacht. Da die meisten zusätzlichen Berechnungen meistens während der Aufzeichnung ausgeführt werden und im Vergleich zu ihnen die Aufzeichnung selbst nicht viel Zeit in Anspruch nimmt.
  12. Eine weitere grundlegende Alternative zur Synchronisierung durch Blocker ist die einfachste Methode in der Thread-Klasse, die eine benutzerdefinierte Nachricht an einen anderen Thread sendet, und eine Methode, mit der Sie benutzerdefinierte Nachrichten von anderen Threads abrufen können. Außerdem müssen Sie in der Methode "run" des an Thread übergebenen ausführbaren Objekts die Methode explizit aufrufen, die den Thread beendet, und ohne dass ein Kompilierungsfehler vorliegt. Fügen Sie außerdem eine Methode hinzu, die benutzerdefinierte ausführbare Ereignisse von anderen Threads auslöst und nach jeder Unterbrechung Nachrichten sendet. All dies ändert nichts grundlegend, vereinfacht aber die fadenorientierte Entwicklung in 90% der Fälle. Besonders in Fällen, in denen die Entwicklung in Eile ist, und dies ist die Mehrzahl der Fälle.
  13. Tatsächlich enthält der Graph aller Objekte im Speicher immer nur primitive Typen, Arrays oder Null oder eine Verknüpfung zu einem nativen Element in allen Scheitelpunkten. Ein grundlegendes Werkzeug, mit dem das gesamte Diagramm in beliebiger Textform gespeichert werden kann, ist sehr hilfreich. Große Arrays von Primitiven können separat gespeichert werden, inline klein codiert. Plus-Version der virtuellen Maschine und - los geht's, diese Struktur kann im Speicher wiederhergestellt werden.
  14. Ein nützliches Werkzeug zum Suchen nach Objekten im Objektdiagramm nach angegebenen Kriterien. Berücksichtigen Sie dabei die Zugriffsmodifizierer und den Typ der einfachen SQL. Diese Aufgabe wird durch die Punkte 1 ... 9 erheblich vereinfacht. Ein solches Werkzeug kann nicht nur die Hierarchie von Objekten vereinfachen, sondern auch verschiedene Tests und die Kontrolle der zulässigen Werte organisieren und versuchen, den Prolog einzuholen.

Jetzt auch beliebt: