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).
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.
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());
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.
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····.
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;
}
}
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 ...
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ß.
Code, der manchmal verrückt wird
try {
//Verschiedene Verarbeitung
} catch (Exception e) {
}
Ich fange eine Ausnahme, aber ... ?? Spucke keine Protokolle aus! ?? Ich meine ...
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.
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