Über die Vermeidung der Auswirkung von Reflexion auf die Logik

Das Problem

Heute habe ich gefragt: Wir wissen, dass Java Reflection die Objekte im System abrufen und dann die Methoden dieser Objekte aufrufen oder sogar die Attributwerte der Objekte ändern kann. Dann lautet die heutige Frage: Wie schreiben wir, wenn wir Klassen schreiben? Code, der weniger von Reflexion betroffen ist. Einfach ausgedrückt, wenn es durch Reflexion aufgerufen wird, gibt es weniger Rückblenden, Verwirrung und andere Situationen. Was hat das außerdem mit unserer täglichen Codierung zu tun?

Die Antwort

Lassen Sie uns zunächst sehen, was Reflexion bewirken kann:

  1. Rufen Sie den Konstruktor frei auf, um Objekte zu erstellen.
  2. Rufen Sie die Methode des Objekts frei auf.
  3. Ändern Sie verschiedene Eigenschaften von Objekten frei.

Für den ersten Punkt ist unsere Erleuchtung, dass wir nach dem Schreiben des Konstruktors der Klasse verstehen müssen, welche Attribute leer sein können; daher kann es bei jeder Methode eine entsprechende Behandlung für den Fall eines möglichen Leerlaufs geben;

Für den zweiten Punkt ist es am besten, nicht damit zu rechnen, dass einige Methoden in der richtigen Reihenfolge ausgeführt werden, da wir dies möglicherweise beim ersten Schreiben garantieren können. Bei der iterativen Änderung des Codes kann dies jedoch möglicherweise nicht garantiert werden Es gibt einige unerwartete Fehler;

Für den dritten Punkt ist es am besten, einige bekannte Werte nicht anhand der Logik des Codes zu beurteilen, da das Attribut beim ursprünglichen Schreiben möglicherweise einen Wert haben muss. In ähnlicher Weise kann der Attributwert beim Iterieren null sein. .

Es ist am besten, eine gemeinsame Verarbeitungsmethode für Java-Quellcode zu verwenden:

final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
               boolean evict) {
    Node<K,V>[] tab; Node<K,V> p; int n, i;
    if ((tab = table) == null || (n = tab.length) == 0)
        n = (tab = resize()).length;
  ...
}

Dies ist eine kleine Skizze des HashMap-Quellcodes. Sie können sehen, dass er eine Tabulatorvariable zum Speichern der Tabelle verwendet. Der Vorteil davon ist, dass die Ausführung dieser Methode nicht beeinträchtigt wird, nachdem die nachfolgende Tabelle auf andere Objekte verweist. Verhindern Sie unbekannte Fehler, die durch die gleichzeitige Verwendung mehrerer Threads verursacht werden.

Veröffentlicht 19 Originalartikel · Gelobt 8 · Besuche 4040

Ich denke du magst

Origin blog.csdn.net/u014068277/article/details/103951227
Empfohlen
Rangfolge