DataflowAnomalyAnalysis:「DD」が見つかりました-変数「変数」の異常(行「n1」-「n2」)。
DataflowAnomalyAnalysis:「DU」が見つかりました-変数「変数」の異常(行「n1」-「n2」)。
わからない。
NullAssignment:オブジェクトをnullに割り当てることは、コードの臭いです。リファクタリングを検討してください。
null
オブジェクトがローカルオブジェクト(メソッドの外部で使用されていない)である場合、ガベージコレクションを支援するオブジェクトを設定しませんか?それともそれは神話ですか?
ローカルメソッド内のオブジェクトは、メソッドが戻るとガベージコレクションされるようにマークされます。それらをnullに設定しても、違いはありません。
経験の浅い開発者になるので、それに関するすべてのnull割り当ては、コードの臭いと見なされる可能性があります。
MethodArgumentCouldBeFinal:パラメータ'param'が割り当てられておらず、finalとして宣言できます
LocalVariableCouldBeFinal:ローカル変数'variable'をfinalと宣言できます
final
パラメータと変数を使用することに利点はありますか?
オブジェクトのライフサイクル中に値が変更されないことが明確になります。
また、万が一誰かが値を割り当てようとした場合、コンパイラはコンパイルタイプでのこのコーディングエラーを防ぎます。
このことを考慮:
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();
}
}
時々家を燃やす不思議なバグを解決するためにあなたが割り当てられているとしましょう。
使用されたパラメーターが何であったかを知っていますが、条件が満たされない場合にメソッドが呼び出される理由がわかりません(調査結果によると)burnTHeHouse
途中のある時点で、誰かが参照を変更していること、および他のオブジェクトを使用していることを確認するには、しばらく時間がかかります。
final
この種のことを防ぐためにヘルプを使用する。
LooseCoupling:「LinkedList」のような実装タイプの使用は避けてください。代わりにインターフェースを使用してください
特に必要なことがわかっている場合LinkedList
、将来の開発者に意図を明確にするためにそれを使用しないのはなぜですか?意味のあるクラスパスの最上位にあるクラスを返すことは1つのことですが、変数が最も厳密な意味であると宣言しないのはなぜですか?
この場合、違いはありません。あなたは特定の機能を使用していないのでLinkedList
、提案は公正だと思います。
今日、LinkedListは理にかなっていますが、インターフェースを使用することで、自分自身(または他の人)が気に入らないときに簡単に変更できるようになります。
小規模で個人的なプロジェクトの場合、これはまったく意味がないかもしれませんが、すでにアナライザーを使用しているので、コードの品質はすでに気になっていると思います。
また、経験の浅い開発者が良い習慣を身に付けるのに役立ちます。[あなたが1人だと言っているわけではありませんが、アナライザーはあなたを知りません;)]
PreventSynchronizedAtMethodLevel:メソッドレベルの同期ではなくブロックレベルを使用する
ブロックレベルの同期には、メソッドレベルの同期に比べてどのような利点がありますか?
同期セクションは小さいほど良いです。それでおしまい。
また、メソッドレベルで同期すると、オブジェクト全体がブロックされます。ブロックレベルで同期する場合は、その特定のセクションを同期するだけです。状況によっては、それが必要な場合もあります。
PreventUsingShortType:短いタイプは使用しないでください
私の最初の言語はCとC++でしたが、Javaの世界では、データを最もよく表すタイプを使用しないのはなぜですか?
私はこれを聞いたことがありません、そして私はあなたに同意します:)しかし私は短いものを使ったことがありません。
int
私の推測では、それを使用しないことで、シームレスにアップグレードするのに役立つでしょう 。
コードの臭いは、パフォーマンスの最適化よりもコードの品質を重視しています。そのため、プログラムの速度を向上させるよりも、経験の浅いプログラマーや落とし穴を避けるためのアドバイスが提供されます。
このようにして、より良い設計に合うようにコードを変更しようとするときに、多くの時間とフラストレーションを節約できます。
アドバイスが意味をなさない場合は、無視してください。あなたが担当の開発者であり、ツールはまさにそのツールです。何かがうまくいかない場合、ツールのせいにすることはできませんよね?