FindBugs 規則整理:Style & Dodgy

 

DLS_DEAD_LOCAL_STORE

  • 翻譯

    Dead store to .. in ...

    This instruction assigns a value to a local variable, but the value is not read or used in any subsequent instruction. Often, this indicates an error, because the value computed is never used.

    Note that Sun's javac compiler often generates dead stores for final local variables. Because FindBugs is a bytecode-based tool, there is no easy way to eliminate these false positives.

    某個局部變量沒有被應用過,這通常存在問題,但是javac編譯器在編譯局部變量時,也會產生dead stores,從而倒是FindBugs誤報。

  • 原因

    同翻譯

  • 解決方案

    刪除無用的局部變量或視情況而定

DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD

  • 翻譯

    Dead store to ... rather than field with same name in ...

    This instruction assigns a value to a local variable, but the value is not read or used in any subsequent instruction. Often, this indicates an error, because the value computed is never used. There is a field with the same name as the local variable. Did you mean to assign to that variable instead?

    成員變量和局部變量重名

  • 原因

    同翻譯

  • 解決方案

    修改某一個變量的命名

ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD

  • 翻譯

    Write to static field ... from instance method ...

    This instance method writes to a static field. This is tricky to get correct if multiple instances are being manipulated, and generally bad practice.

    實例方法往靜態域中執行寫入操作,這會導致共享問題,因爲其他實例也會訪問該靜態變量,但是卻不知道某個實例已經修改了該靜態變量的引用,導致不可預知的問題

  • 原因

    同翻譯

  • 解決方案

    將修改靜態域的實例方法改爲靜態方法

XSS_REQUEST_PARAMETER_TO_SEND_ERROR

Servlet reflected cross site scripting vulnerability

在代碼中在Servlet輸出中直接寫入一個HTTP參數,這會造成一個跨站點的腳本漏洞。

XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER

Servlet reflected cross site scripting vulnerability

代碼直接寫入參數的HTTP服務器錯誤頁(使用HttpServletResponse.sendError)。表達了類似的不受信任的輸入會引起跨站點腳本漏洞。

BC_BAD_CAST_TO_ABSTRACT_COLLECTION

Questionable cast to abstract collection

在代碼中把一個集合強制類型轉換爲一個抽象的集合(如list,set或map)。保證該對象類型和將要轉換的類型是一致的。如果你只是想要便利一個集合,那麼你就不必將它轉換爲Set或List。

BC_BAD_CAST_TO_CONCRETE_COLLECTION

Questionable cast to concrete collection

代碼把抽象的集合(如List,Set,或Collection)強制轉換爲具體落實類型(如一個ArrayList或HashSet)。這可能不正確,也可能使您的代碼很脆弱,因爲它使得難以在今後的切換指向其他具體實現。除非你有特別理由這樣做,否則只需要使用抽象的集合類。

BC_UNCONFIRMED_CAST

Unchecked/unconfirmed cast

強制類型轉換操作沒有經過驗證,而且不是所有的此種類型裝換過的類都可以再強制類型轉換爲原類型。在代碼中需要進行邏輯判斷以保證可以進行這樣的操作。

BC_VACUOUS_INSTANCEOF

instanceof will always return true

instanceof測試將始終返回真(除非被測試的值爲空)。雖然這是安全,確保它是不是說明一些誤解或其他一些邏輯錯誤。如果你真的想測試是空的價值,也許會更清楚這樣做的更好空試驗,而不是一個instanceof測試。這種情況可能發生中該實例肯定是該類的對象。

ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT

Unsigned right shift cast to short/byte

無符號數右移後進行轉換爲short或者byte類型時可能會丟棄掉高位的值,這樣的結果就是有符合數和無符號數無法區分(這取決於移位大小)

CI_CONFUSED_INHERITANCE

Class is final but declares protected field

這個類被聲明爲final的,而是字段屬性卻聲明爲保護類型的。由於是final類,它不能再被繼承,而再聲明爲保護類型的很容易造成混淆。爲了從外部能正確的使用它應該把它們聲明爲private或者public類型。

DB_DUPLICATE_BRANCHES

Method uses the same code for two branches

此方法使用相同的代碼,以實現兩個有條件的分支。檢查以確保這是不是一個編碼錯誤。

DB_DUPLICATE_SWITCH_CLAUSES

Method uses the same code for two switch clauses

他的方法使用相同的代碼來實現兩個switch的聲明條款。這可能是重複代碼的情況,但可能也顯示出編碼的錯誤。

DLS_DEAD_LOCAL_STORE_IN_RETURN

Useless assignment in return statement

本聲明把一個局部變量放到方法的返回語句中。這對於方法中局部變量來說是沒有意義的。

DLS_DEAD_LOCAL_STORE_OF_NULL

Dead store of null to local variable

把一個本地變量賦值爲null值,並且再也沒有對這個變量做任何的操作。這樣可能是爲了垃圾回收,而在Java SE 6.0,這已不再需要。

DMI_HARDCODED_ABSOLUTE_FILENAME

Code contains a hard coded reference to an absolute pathname

類包含一個硬編碼的絕對路徑

DMI_NONSERIALIZABLE_OBJECT_WRITTEN

Non serializable object written to ObjectOutput

代碼中讓一個非序列化的對象出現在ObjectOutput.writeObject()方法中,這樣會引起一個錯誤。

DMI_USELESS_SUBSTRING

Invocation of substring(0), which returns the original value

此代碼調用了subString(0)方法,它將返回原來的值。

EQ_DOESNT_OVERRIDE_EQUALS

Class doesn't override equals in superclass

子類定義了一個新的equals方法但是卻不是覆寫了父類本省的equals()方法。

FE_FLOATING_POINT_EQUALITY

Test for floating point equality

此操作比較兩個浮點值是否相等。由於浮點運算可能會涉及到舍入,計算float和double值可能不準確。如果要求值必須準確,如貨幣值,可以考慮使用固定精度類型,如BigDecimal類型的值來比較

VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN

Non-Boolean argument formatted using %b format specifier

使用%b去格式化Boolean類型的值是不正確的,但是它不會拋出異常,任何非空的值都會輸出true,任何爲空的值都會輸出false

IC_INIT_CIRCULARITY

Initialization circularity

初始化死循環

ICAST_IDIV_CAST_TO_DOUBLE

integral division result cast to double or float

整形數除法強制轉換爲double或者float類型。

ICAST_INTEGER_MULTIPLY_CAST_TO_LONG

Result of integer multiplication cast to long

整形乘法的結果轉換爲long型

IM_AVERAGE_COMPUTATION_COULD_OVERFLOW

Computation of average could overflow

計算平均值可能溢出

INT_VACUOUS_COMPARISON

Vacuous comparison of integer value

整形數進行比較結果總是不變。例如:x <= Integer.MAX_VALUE

MTIA_SUSPECT_SERVLET_INSTANCE_FIELD

Class extends Servlet class and uses instance variables

這個類擴展從Servlet類,並使用實例的成員變量。由於只有一個Servlet類的實例,並在多線程方式使用,這種模式有可能存在問題。考慮只使用方法的局部變量。

MTIA_SUSPECT_STRUTS_INSTANCE_FIELD

Class extends Struts Action class and uses instance variables

類擴展自Struts的Action類並使用這個實例的成員變量,因爲在Struts框架中只存在一個Action實例對象並且使用在多線程的情況下很可能會出現問題。

NP_DEREFERENCE_OF_READLINE_VALUE

Dereference of the result of readLine() without nullcheck

對readLine()的結果值沒有進行判空操作就去重新賦值,這樣的操作可以會拋出空指針異常。

NP_IMMEDIATE_DEREFERENCE_OF_READLINE

Immediate dereference of the result of readLine()

對readLine()的結果立即賦值,這樣的操作可以會拋出空指針異常。

NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE

Possible null pointer dereference due to return value of called method

方法的返回值沒有進行是否爲空的檢查就重新賦值,這樣可能會出現空指針異常。

NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE

Parameter must be nonnull but is marked as nullable

參數值在任何情況下都不能爲空,但是有明確的註釋它可以爲空。

NS_DANGEROUS_NON_SHORT_CIRCUIT

Potentially dangerous use of non-short-circuit logic

代碼中使用(& or |)代替(&& or ||)操作,這會造成潛在的危險。

NS_NON_SHORT_CIRCUIT

Questionable use of non-short-circuit logic

代碼中使用(& or |)代替(&& or ||)操作,會引起不安全的操作

PZLA_PREFER_ZERO_LENGTH_ARRAYS

Consider returning a zero length array rather than null

考慮返回一個零長度的數組,而不是null值

QF_QUESTIONABLE_FOR_LOOP

Complicated, subtle or wrong increment in for-loop

for循環中存在複雜,微妙或者錯誤的自增

RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE

Redundant comparison of non-null value to null

重複比較非空值和null

RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES

Redundant comparison of two null values

方法中對兩個null值進行比較

RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE

Redundant nullcheck of value known to be non-null

方法中對不爲空的值進行爲空的判斷。

REC_CATCH_EXCEPTION

Exception is caught when Exception is not thrown

捕獲了沒有拋出的異常

RI_REDUNDANT_INTERFACES

Class implements same interface as superclass

子類和父類都實現了同一個接口,這種定義是多餘的。

RV_DONT_JUST_NULL_CHECK_READLINE

Method discards result of readLine after checking if it is nonnull

readLine方法的結果不爲空時被拋棄

RV_REM_OF_RANDOM_INT

Remainder of 32-bit signed random integer

此代碼生成一個隨機的符號整數,然後計算另一個值的。由於隨機數可以是負數,所以其餘操作的結果也可以是負面的。考慮使用Random.nextInt(int)方法代替。

SA_LOCAL_DOUBLE_ASSIGNMENT

Double assignment of local variable

爲一個局部變量兩次賦值,這樣是沒有意義的。

SA_LOCAL_SELF_ASSIGNMENT

Self assignment of local variable

局部變量使用自身給自己賦值

SF_SWITCH_FALLTHROUGH

Switch statement found where one case falls through to the next case

Switch語句中一個分支執行後又執行了下一個分支。通常case後面要跟break 或者return語句來跳出。

SF_SWITCH_NO_DEFAULT

Switch statement found where default case is missing

Switch沒有默認情況下執行的case語句。

SE_PRIVATE_READ_RESOLVE_NOT_INHERITED

private readResolve method not inherited by subclasses

聲明爲private的序列化方不能被子類繼承

UCF_USELESS_CONTROL_FLOW

Useless control flow

沒有任何作用的條件語句。

UCF_USELESS_CONTROL_FLOW_NEXT_LINE

Useless control flow to next line

無效的條件控制語句,注意if (argv.length == 1);以“;”結尾,下面的語句無論是否滿足都會運行。

if (argv.length == 1);

System.out.println("Hello, " + argv[0]);

UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR

Field not initialized in constructor

字段從來沒有在任何構造函數初始化,對象被創建後值爲空。如果該字段未被定義就重新賦值會產生一個空指針異常。

XFB_XML_FACTORY_BYPASS

Method directly allocates a specific implementation of xml interfaces

方法自定義了一種XML接口的實現類。最好是使用官方提供的工廠類來創建這些對象,以便可以在運行期中改變。例如:

javax.xml.parsers.DocumentBuilderFactory

javax.xml.parsers.SAXParserFactory

javax.xml.transform.TransformerFactory

org.w3c.dom.Document.createXXXX

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章