Frage

  

DataflowAnomalyAnalysis: Gefunden   ‚DD'-Anomalie für Variable 'variable'   (Linien 'n1' - 'n2').

     

DataflowAnomalyAnalysis: Gefunden   ‚DU'-Anomalie für Variable 'variable'   (Linien 'n1' - 'n2').

DD und DU bekannt vorkommen ... Ich möchte die Dinge sagen, wie Tests und Analysen zur schwächsten vor und nach Bedingungen beziehen, aber ich erinnere mich nicht, die Besonderheiten.

  

NullAssignment: Zuordnung eines Objekts zu   Null ist ein Code Geruch. Erwägen   Refactoring.

Möchten Einstellung nicht um ein Objekt null in Garbage Collection unterstützen, wenn das Objekt ein lokales Objekt (nicht außerhalb des Verfahrens verwendet wird)? Oder ist das ein Mythos?

  

MethodArgumentCouldBeFinal: Parameter   ‚Param‘ ist nicht belegt und könnte   final deklariert

     

LocalVariableCouldBeFinal: Lokale   Variable ‚variable‘ könnte erklärt werden,   final

Gibt es irgendwelche Vorteile bei der Verwendung final Parameter und Variablen?

  

LooseCoupling: Vermeiden Sie   Implementierungstypen wie   'LinkedList'; Verwenden Sie die Schnittstelle   stattdessen

Wenn ich weiß, dass ich speziell eine LinkedList brauchen, warum sollte ich nicht ein verwenden, um meine Absichten ausdrücklich klar Zukunft Entwickler zu machen? Es ist eine Sache, die Klasse zurückzukehren, die höchste auf dem Klassenpfad ist, die Sinn macht, aber warum sollte ich meine Variablen nicht erklären der strengsten Sinne sein?

  

AvoidSynchronizedAtMethodLevel: Verwenden Sie   Blockebene statt Methode Ebene   Synchronisation

Welche Vorteile bietet Block-Level-Synchronisation haben über Verfahren Ebene Synchronisation?

  

AvoidUsingShortType: nicht die Verwendung   Kurz Typ

Meine ersten Sprachen waren C und C ++, aber in der Java-Welt, warum soll ich nicht die Art verwenden, die am besten meine Daten beschreiben?

War es hilfreich?

Lösung

  • DD und DU Anomalien (wenn ich mich richtig erinnere-ich FindBugs und die Nachrichten sind ein wenig anders) beziehen Wert auf eine lokale Variable zuweisen, die nie gelesen wird, in der Regel, weil sie, bevor überhaupt ein anderer Wert zugewiesen wird wird gelesen. Ein typischer Fall würde eine Variable mit null wird initialisiert, wenn es deklariert wird. Deklarieren Sie die Variable nicht, bis es gebraucht wird.

  • Zuweisen von null zu einer lokalen Variablen, um die Garbage Collector „helfen“ ist ein Mythos. PMD ist dass Sie wissen, dies ist nur kontraproduktiv Unordnung.

  • final auf einer lokalen Variablen angeben sollte sehr nützlich sein, um einen Optimierer, aber ich habe keine konkreten Beispiele für aktuelle JITs Vorteil dieses Hinweises nehmen. Ich habe es nützlich Argumentation über die Richtigkeit meines eigenen Code gefunden.

  • Die Angabe Schnittstellen in Bezug auf ... na ja, Schnittstellen ist ein großer Entwurf der Praxis. Sie können ganz einfach Implementierungen der Sammlung ändern, ohne überhaupt die Anrufer zu beeinträchtigen. Das ist, was Schnittstellen sind alle über.

  • Ich kann nicht glauben, von vielen Fällen, in denen ein Anrufer würde erfordert ein LinkedList, da es keine API verfügbar macht, die nicht durch eine Schnittstelle deklariert wird. Wenn der Kunde auf dieser API beruht, ist es durch die richtige Schnittstelle zur Verfügung.

  • Blockebene Synchronisation ermöglicht es dem kritischen Abschnitt kleiner zu sein, was so viel Arbeit wie möglich ermöglicht es gleichzeitig zu tun. Vielleicht noch wichtiger ist, ermöglicht es die Verwendung eines Lock-Objekt, das privat durch das einschließende Objekt gesteuert wird. Auf diese Weise können Sie sicherstellen, dass kein Deadlock auftreten kann. Mit Hilfe der Instanz selbst als Sperre, jemand auf sie falsch synchronisieren kann, Deadlock verursacht.

  • Operanden vom Typ short gefördert werden in irgendwelchen Operationen int. Diese Regel ist so dass Sie wissen, dass diese Aktion stattfindet, und man könnte genauso gut eine int verwenden. Um jedoch den short Typ mit Speicher speichern kann, also wenn es eine Instanz Mitglied ist, würde ich wahrscheinlich diese Regel ignorieren.

Andere Tipps

  

DataflowAnomalyAnalysis: Gefunden   ‚DD'-Anomalie für Variable 'variable'   (Linien 'n1' - 'n2').

     

DataflowAnomalyAnalysis: Gefunden   ‚DU'-Anomalie für Variable 'variable'   (Linien 'n1' - 'n2').

Keine Ahnung.

  

NullAssignment: Zuordnung eines Objekts zu   Null ist ein Code Geruch. Erwägen   Refactoring.

     

Würde Einstellung nicht um ein Objekt null in Garbage Collection unterstützen, wenn das Objekt ein lokales Objekt (nicht außerhalb des Verfahrens verwendet wird)? Oder ist das ein Mythos?

Objekte in lokalen Methoden sind markiert Müll, sobald die Methode zurückgibt, gesammelt werden. sie auf null einstellen wird keinen Unterschied machen.

Da wäre es weniger Erfahrung Entwickler machen, was ist, dass null Zuordnung alles darüber einen Code Geruch in Betracht gezogen werden kann.

  

MethodArgumentCouldBeFinal: Parameter   ‚Param‘ ist nicht belegt und könnte   final deklariert

     

LocalVariableCouldBeFinal: Lokale   Variable ‚variable‘ könnte erklärt werden,   final

     

Gibt es irgendwelche Vorteile bei der Verwendung final Parameter und Variablen?

Es deutlicher machen, dass der Wert nicht während des Lebenszyklus des Objekts ändern.

Auch wenn vielleicht jemand versuchen, einen Wert zuweisen, wird der Compiler diese Codierung Fehler bei der Kompilierung Art verhindern.

bedenken Sie:

 public void businessRule( SomeImportantArgument important )  {
      if( important.xyz() ){
          doXyz();
      }
      // some fuzzy logic here
      important = new NotSoImportant();
      // add for/if's/while etc 

     if( important.abc() ){ // <-- bug
         burnTheHouse();
     }
  } 

Nehmen sich an, Sie vergeben einen geheimnisvollen Fehler zu lösen, die das Haus von Zeit zu Zeit brennt.

Sie wissen, was die Parameter verwendet worden sind, was Sie nicht verstehen, ist WARUM die burnTHeHouse Methode aufgerufen wird, wenn die Bedingungen nicht erfüllt sind (je nach Befunde)

Es dauert eine Weile, dass in der Mitte an einem gewissen Punkt findout, somone die Referenz ändern, und dass Sie mit andere Objekt.

Mit final Hilfe, um diese Art von Dingen zu verhindern.

  

LooseCoupling: Vermeiden Sie   Implementierungstypen wie   'LinkedList'; Verwenden Sie die Schnittstelle   stattdessen

     

Wenn ich weiß, dass ich speziell eine LinkedList brauchen, warum sollte ich nicht ein verwenden, um meine Absichten ausdrücklich klar Zukunft Entwickler zu machen? Es ist eine Sache, die Klasse zurückzukehren, die höchste auf dem Klassenpfad ist, die Sinn macht, aber warum sollte ich meine Variablen nicht erklären der strengsten Sinne sein?

Es gibt keinen Unterschied in diesem Fall. Ich würde denken, dass da Sie nicht LinkedList spezifische Funktionalität der Vorschlag fair verwenden.

Heute könnte LinkedList Sinn machen, aber durch eine Schnittstelle mit Ihnen helfen Sie sich selbst (oder andere) es leicht zu ändern, wenn es gewohnt.

Für kleine, diese persönliche Projekte können überhaupt nicht sinnvoll, aber da Sie einen Analysator bereits verwenden, ich denke, Sie über die Code-Qualität sorgen bereits.

Außerdem hilft weniger erfahrenen Entwickler gute Gewohnheiten zu erstellen. [Ich sage nicht, du bist ein, sondern der Analysator Dich nicht wissen;)]

  

AvoidSynchronizedAtMethodLevel: Verwenden Sie   Blockebene statt Methode Ebene   Synchronisation

     

Welche Vorteile bietet Block-Level-Synchronisation haben über Verfahren Ebene Synchronisation?

Je kleiner der synchronisierten Abschnitt, desto besser. Das ist es.

Auch, wenn Sie auf der Methode Ebene synchronisieren werden Sie das ganze Objekt blockieren. Wenn Sie auf Blockebene zu synchronisieren, synchronisieren Sie gerade diesen speziellen Abschnitt, in einigen Situationen das ist, was Sie brauchen.

  

AvoidUsingShortType: nicht die Verwendung   Kurz Typ

     

Meine ersten Sprachen waren C und C ++, aber in der Java-Welt, warum soll ich nicht die Art verwenden, die am besten meine Daten beschreiben?

Ich habe noch nie davon gehört, und ich stimme mit Ihnen :) ich nie obwohl kurz verwenden haben.

Meine Vermutung ist, dass durch die Verwendung es nicht, werden Sie Ihre Selbst u geholfenpgrade nahtlos int.

Code Gerüche sind mehr orientierte Qualität codieren als Performance-Optimierungen. So ist die Beratung für weniger erfahrene Programmierer gegeben und Fallen zu vermeiden, als Programmgeschwindigkeit zu verbessern.

Auf diese Weise können Sie eine Menge Zeit und Frustrationen speichern, wenn sie versuchen, den Code zu ändern, um ein besseres Design zu passen.

Wenn es die Beratung macht keinen Sinn, einfach ignorieren, denken Sie daran, Sie sind die Entwickler bei Ladung und das Werkzeug ist nur, dass ein Werkzeug. Wenn etwas schief geht, können Sie das Tool nicht die Schuld, nicht wahr?

Nur ein Hinweis auf die final Frage.

Putting "final" auf eine Variable ergibt es nur übertragbar einmal . Dies bedeutet nicht zwangsläufig, dass es leichter zu schreiben, aber es sicherlich bedeutet, dass es leichter ist, lesen für einen zukünftigen Betreuer.

Bitte beachten Sie folgende Punkte:

  • jede Variable mit einem final kann sofort in eingestuft werden „wird nicht Wert ändern, während Sie“.
  • implizit bedeutet dies, dass, wenn alle Variablen, die mit der endgültigen markiert wird sich nicht ändern, dann NICHT die Variablen mit final markiert tatsächlich ändern.

Das bedeutet, dass Sie können bereits sehen, wenn sie durch den Definitionsteil zu lesen, welche Variablen zu achten, da sie Wert während des Code ändern können, und der Betreuer kann seine / ihre Bemühungen besser verbringen als der Code besser lesbar ist.

  

Wäre es nicht um ein Objekt zu null Einstellung   Unterstützung bei der Garbage Collection, wenn die   Objekt ist ein lokales Objekt (nicht verwendet   außerhalb des Verfahrens)? Oder ist das ein   Mythos?

Das einzige, was es tut, ist es für das Objekt möglich machen, bevor das Ende des Verfahrens GCD werden, was nur selten notwendig ist.

  

Gibt es irgendwelche Vorteile bei der Verwendung endgültige Parameter und Variablen?

Es macht den Code etwas klarer, da Sie somwhere geändert nicht über den Wert kümmern müssen wird, wenn Sie den Code zu analysieren. Öfter dann den Wert einer Variablen ändern, nicht die Sie nicht brauchen oder wollen, sobald es trotzdem gesetzt wird.

  

Wenn ich weiß, dass ich speziell eine Notwendigkeit   LinkedList, warum sollte ich eine nicht verwenden, um   machen meine Absichten ausdrücklich klar   zukünftige Entwickler?

Können Sie aus irgendeinem Grund denken, warum Sie speziell ein brauchen würde LinkedList?

  

Es ist eine Sache zu   Rückkehr die Klasse, die auf der höchsten ist   Classpath, die Sinn macht, aber warum   würde ich meine Variablen nicht erklären zu sein   von strengsten Sinne?

Ich weiß nicht viel über lokale Variablen oder Felder, aber wenn Sie eine Methode Parameter vom Typ LinkedList erklären, werde ich dich jagen und dich verletzt, weil sie es für mich unmöglich macht Dinge wie Arrays.asList() und Collections.emptyList() zu verwenden.

  

Welche Vorteile bietet Block-Level-Synchronisation haben über Verfahren Ebene Synchronisation?

Die größte ist, dass es Ihnen ermöglicht, ein spezielles Überwachungsobjekt zu verwenden, so dass nur die kritischen Abschnitte sich gegenseitig aus, dass, anstatt alles mit dem gleichen Monitor sein müssen.

  

in der Java-Welt, warum soll ich nicht   verwenden, um die Art, die am besten beschreibt meine   Daten?

Da Typen kleiner als int sind automtically für alle Berechnungen auf int gefördert und Sie müssen niedergeschlagen ihnen etwas zu vergeben. Dies führt zu unübersichtlich Code und ganz viel confustion (vor allem, wenn Autoboxing beteiligt ist).

AvoidUsingShortType: Nicht die kurze Art verwenden

  • Liste item

    kurz ist 16 Bit, 2 Kompliment in Java

  • eine kurze mathmatical operaion mit irgendetwas in der Integer Familie außerhalb eines anderen Kurz wird eine Laufzeitverlängerung Zeichen Umstellung auf die größere Größe benötigen. gegen eine Gleitkomma-Betrieb erfordert Vorzeichenerweiterung und eine nicht-triviale Umwandlung in IEEE-754.
  • kann nicht Beweis finden, aber mit einem 32-Bit oder 64-Bit-Registern, bist du nicht mehr Speicher auf ‚Prozessorbefehlen‘ auf der Bytecode-Ebene. Sie parken ein kompaktes Auto in einem Parkplatz des Aufliegers soweit das Prozessorregister betroffen ist.
  • Wenn Sie Ihr Projekt auf Byte-Code-Ebene optimieren, wow. einfach wow. ; P
  • Ich stimme diesen pmd Warnung auf die Gestaltung Seite des Ignorierens, wiege nur genau das Objekt mit einem ‚kurzen‘ im Vergleich zu den entstandenen Performance Umwandlungen zu beschreiben.
  • meiner Meinung nach, die entstandene Performance Hits sind miniscule auf den meisten Maschinen. ignoriert die Fehler.
  

Welche Vorteile bietet Block-Level   Synchronisation haben über Verfahren Ebene   Synchronisation?   Synchronisieren Sie eine Methode ist wie ein synchronize(getClass()) Block tun, und blockiert alle Klasse.

Vielleicht möchten Sie nicht, dass

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top