Wirklich beängstigende (Java Anti-Pattern) Geschichte

Hallo, das ist Shrimpman von der Buchhaltung Saas Japan.

Bei der Arbeit im Bereich Java-Anwendungen ist die Sprache möglicherweise tot genug Ich denke, es ist nicht ungewöhnlich, ältere Java-Anwendungen zu warten. Dann mysteriöser Code von Java-Anfängern zu dieser Zeit, der für moderne Programmierer schwer zu verstehen ist, Sie werden oft auf gefährlichen Code stoßen, der Flusen und Fehler erzeugt.

Dieses Mal möchte ich diejenigen bekannt geben, die im Ranking-Format einen besonders starken Eindruck hinterlassen haben. Es ist wirklich passiert (obwohl die meisten Fälle außerhalb unseres Unternehmens liegen).

Öffentliche statische Variable Nr. 10

Eine öffentliche statische Variable ist wie eine globale Variable in der VM, nicht wahr? Wollten Sie die Verbindung von verschiedenen Orten erhalten? Dies ist schwierig, da es als öffentliche statische Verbindung deklariert wurde. Wenn Sie eine Verbindung erhalten, ist diese natürlich bereits geschlossen.

Nr. 9 privater statischer (nicht endgültiger) Logger

Hier und da wurden Logger mit privaten statischen Deklarationen (ohne endgültige Modifikatoren) verwendet. Dies ist an sich kein Problem, aber wenn diese Klasse die Zielklasse von Serialize ist, Natürlich konnte Logger nicht serialisiert werden, daher wurde eine Ausnahme ausgelöst. Es ist unwiderstehlich, weil es hier und da überflutet wurde.

private static Logger log = Logger.getLogger(this.getClass());

Override No.8 finalize

Die finalize-Methode der Object-Klasse bezieht sich nicht mehr auf dieses Objekt Es wird ausgeführt, wenn es als Ziel für die Zerstörung durch den Garbage Collector gesammelt wird. Ich war in Schwierigkeiten, weil ich den Prozess durch Überschreiben der Finalisierungsmethode geschrieben habe. Es wurde angenommen, dass der Prozess ausgeführt wird oder nicht, und wir würden nicht wissen, wann er aufgerufen wird.

Nr.7 Erstellen Sie eine geschichtete Struktur und suchen Sie nach Nullen

SomeValue value = null;
if (someClass != null
        && someClass.getValueA() != null
        && someClass.getValueA().getValueB() != null
        && someClass.getValueA().getValueB().getValueC() != null
        && someClass.getValueA().getValueB().getValueC().getValueD() != null
        && someClass.getValueA().getValueB().getValueC().getValueD().getValueE() != null
        && someClass.getValueA().getValueB().getValueC().getValueD().getValueE().getValueF() != null
        && someClass.getValueA().getValueB().getValueC().getValueD().getValueE().getValueF().getValueG() != null) {
    value  = someClass.getValueA().getValueB().getValueC().getValueD().getValueE().getValueF().getValueG();
 }

Beeindruckend····.

Nr.6 Mysteriöse Nebenwirkungsklasse, die kein Singleton ist

Früher war es üblich, eine solche Klasse. Es ist jetzt fast weg.

public class SomeClass {
    private Result result;
    public void init() {
        //So etwas wie das Lesen des Meisters
    }
    public void calculate() {
        //Berechnungsverarbeitung
        result = new Result(xxx);
    }
    public Resut getResult() {
        return result;
    }
}

Nr.5 Wirf alle Ausnahmen

Nun, ich sehe das nicht, aber es kommt gelegentlich vor.

public int extractSomethingUtilityMethod throws IOException, IllegalStateException, NumberFormatException, SomeException.... {
  //Etwas zu verarbeiten
}

Es wurden viele Arten von Ausnahmen gemeldet ... Es ist besser als niedergeschlagen zu werden, aber ich möchte eine solche Methode nicht nennen ...

Nr.4 Nutzlose Wiederverwendung von Variablen (Variablenbereich ist nutzlos breit)

SomeElement element = null;
if (valueA != null) {
    someElement = new Element(valueA)
    someElement.setParent(parentElement);
}
if (valueB != null) {
    someElement = new Element(valueB)
    someElement.setParent(parentElement);
}
if (valueC != null) {
    someElement = new Element(valueC)
    someElement.setParent(parentElement);
}

Es fühlt sich unangenehm an ... Dies allein scheint keine nachteiligen Auswirkungen zu haben, Es ist ein wenig abschreckend für das mysteriöse Ausmaß.

Nr.3 Beseitigung von Ausnahmen

Code, der manchmal verrückt wird

try {
    //Verschiedene Verarbeitung
} catch (Exception e) {
}

Ich fange eine Ausnahme, aber ... ?? Spucke keine Protokolle aus! ?? Ich meine ...

Beenden Sie das Etikett von Nr. 2 für die Schleife

Jetzt, da Java 8 das Zentrum ist, gibt es nur noch wenige Erscheinungsszenen für die Schleife, aber Es wurde praktisch überall als effizienter Schleifenprozess verwendet, der nicht in Legacy-Programmen stecken blieb. Da die for-Schleife jedoch zu bequem verwendet wird, ist die for-Schleife doppelt und dreifach verschachtelt, und es ist möglich, die Schleife zu verlassen. Ein weiser Mann, der Etiketten verwendet, ist erschienen.

loopA: for (int i = 0; i < arrayA.length; ++i) {
    for (int j = 0; j < arrayB.length; ++i) {
        //Etwas zu verarbeiten
        if (xxx) {
            break loopA;
        }
    }
}

Dies ist nur der Anfang, aber wenn Sie dies multiplexen, wissen Sie nie, wann und wie weit Sie aus der Schleife herausgekommen sind.

Nr. 1 sonst, wenn der HARD-Modus nicht verwendet werden kann, der Codierungsregeln auferlegt (selbst?)

Ich würde gerne sagen, wie der Titel sagt, aber es ist ein wenig schwer vorstellbar, deshalb schreibe ich unten ein einfaches Beispiel.

if (bigDecimalValue.compareTo(BigDecimal.valueOf(100000L) < 0)) {
    //wird bearbeitet
} else {
    if (bidDecimalValue.compareTo(BigDecimal.valueOf(200000L) < 0) {
        //wird bearbeitet
    } else {
        if (bigDecimalValue.compareTo(BigDecimal.valueOf(300000L) < 0 ) {
            //wird bearbeitet
        } else {
Dies geht endlos weiter und verschwindet ganz rechts auf dem Bildschirm ...
        }
    }
}

Diejenigen, die dies zum ersten Mal sehen, wissen nicht, was dieser Prozess tut, sondern die bedingte Verzweigung Ich denke, ich bin verrückt, wenn ich einen Job bei einer Firma habe, die ohne sonst codieren muss, wenn. Übrigens wurde diese if-Anweisung, auf die ich gestoßen bin, immer mehr verschachtelt und verschwand ganz rechts auf dem Bildschirm.

Darüber hinaus hat ASaaS in den letzten Jahren die Anzahl der technischen leitenden Ingenieure erhöht und konzentriert sich auch auf die Ausbildung junger Menschen. Wir haben ein System zur Herstellung hochwertiger Produkte. Erstellen und Verwalten eines Produkts, das alle Kunden, die ASaaS verwenden, lange Zeit beruhigt verwenden können Bitte seien Sie versichert, dass es vorhanden ist.

Recommended Posts

Wirklich beängstigende (Java Anti-Pattern) Geschichte
[Java] Die Geschichte einer wirklich beängstigenden switch-Anweisung
Statische Java-Geschichte
Wirklich beängstigende ClassCastException
Die Geschichte des Java-Initialisierers
Java generische Geschichte
Eine Geschichte über die Java 11-Unterstützung für Webdienste
Eine Geschichte über das JDK in der Java 11-Ära
Die Geschichte des Versuchs, JAVA File zu bedienen
[Java] Erstellen Sie einen Filter
Java baut ein Dreieck
Lomboks Java 9+ Support-Story
Eine Geschichte über die Entwicklung von ROS namens Rosjava mit Java
Die Geschichte der Erstellung einer Task-Management-Anwendung mit Swing, Java
[Java] Eine Geschichte über IntelliJ IDEA, die die putIfAbsent-Methode von Map lehrt
Eine Geschichte über Missverständnisse im Umgang mit Java-Scannern (Memo)
Hinweise zu Java GC
[Java] Aizu Online Judges Geschichte 2
[Java] Aizu Online Judges Geschichte 1
Erstellen Sie eine Java-Methode [Memo] [java11]
[Java] Erstellen Sie eine temporäre Datei
Suchen Sie eine Teilmenge in Java
Was ist eine Java-Sammlung?
[Java] Mach es konstant
[Java] Zeichnen Sie ein einfaches Muster
Java erstellt Word-Dokumente
C # und Java überschreiben Story
Machen Sie einen Diamanten mit Java
Eine Geschichte, die bei NotSerializableException steckt
Eine Geschichte, die ich mit Java nur schwer herausfordern konnte
[Hinweis] Eine Geschichte über das Ändern von Java-Build-Tools mit VS-Code
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
Eine Geschichte über die Schwierigkeit, ein Testframework an Java 6 auszurichten
Eine Geschichte, die ich als Nicht-Ingenieur endlich verstanden habe