OLD | NEW |
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or
g/TR/html4/loose.dtd"> | 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or
g/TR/html4/loose.dtd"> |
2 <html><head><title>FindBugs Bug Descriptions</title> | 2 <html><head><META http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
| 3 <title>FindBugs Bug Descriptions</title> |
3 <link rel="stylesheet" type="text/css" href="findbugs.css"/> | 4 <link rel="stylesheet" type="text/css" href="findbugs.css"/> |
4 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/> | 5 <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/> |
5 </head><body> | 6 </head><body> |
6 | 7 |
7 <table width="100%"><tr> | 8 <table width="100%"><tr> |
8 | 9 |
9 <td bgcolor="#b9b9fe" valign="top" align="left" width="20%"> | 10 <td bgcolor="#b9b9fe" valign="top" align="left" width="20%"> |
10 <table width="100%" cellspacing="0" border="0"> | 11 <table width="100%" cellspacing="0" border="0"> |
11 <tr><td><a class="sidebar" href="index.html"><img src="umdFindbugs.png" alt="Fin
dBugs"></a></td></tr> | 12 <tr><td><a class="sidebar" href="index.html"><img src="umdFindbugs.png" alt="Fin
dBugs"></a></td></tr> |
12 | 13 |
(...skipping 19 matching lines...) Expand all Loading... |
32 | 33 |
33 <tr><td><a class="sidebar" href="downloads.html"><b>Downloads</b></a></td></tr> | 34 <tr><td><a class="sidebar" href="downloads.html"><b>Downloads</b></a></td></tr> |
34 | 35 |
35 <tr><td> </td></tr> | 36 <tr><td> </td></tr> |
36 | 37 |
37 <tr><td><a class="sidebar" href="http://www.cafeshops.com/findbugs"><b>FindBugs
Swag</b></a></td></tr> | 38 <tr><td><a class="sidebar" href="http://www.cafeshops.com/findbugs"><b>FindBugs
Swag</b></a></td></tr> |
38 | 39 |
39 <tr><td> </td></tr> | 40 <tr><td> </td></tr> |
40 | 41 |
41 <tr><td><b>Development</b></td></tr> | 42 <tr><td><b>Development</b></td></tr> |
42 <tr><td><font size="-1"> <a class="sidebar" href="http://sourceforge.net/tr
acker/?group_id=96405">Open bugs</a></font></td></tr> | 43 <tr><td><font size="-1"> <a class="sidebar" href="http://sourceforge.net/p/
findbugs/bugs/">Open bugs</a></font></td></tr> |
43 <tr><td><font size="-1"> <a class="sidebar" href="reportingBugs.html">Repor
ting bugs</a></font></td></tr> | 44 <tr><td><font size="-1"> <a class="sidebar" href="reportingBugs.html">Repor
ting bugs</a></font></td></tr> |
44 <tr><td><font size="-1"> <a class="sidebar" href="contributing.html">Contri
buting</a></font></td></tr> | 45 <tr><td><font size="-1"> <a class="sidebar" href="contributing.html">Contri
buting</a></font></td></tr> |
45 <tr><td><font size="-1"> <a class="sidebar" href="team.html">Dev team</a></
font></td></tr> | 46 <tr><td><font size="-1"> <a class="sidebar" href="team.html">Dev team</a></
font></td></tr> |
46 <tr><td><font size="-1"> <a class="sidebar" href="api/index.html">API</a> <
a class="sidebar" href="api/overview-summary.html">[no frames]</a></font></td></
tr> | 47 <tr><td><font size="-1"> <a class="sidebar" href="api/index.html">API</a> <
a class="sidebar" href="api/overview-summary.html">[no frames]</a></font></td></
tr> |
47 <tr><td><font size="-1"> <a class="sidebar" href="Changes.html">Change log<
/a></font></td></tr> | 48 <tr><td><font size="-1"> <a class="sidebar" href="Changes.html">Change log<
/a></font></td></tr> |
48 <tr><td><font size="-1"> <a class="sidebar" href="http://sourceforge.net/pr
ojects/findbugs">SF project page</a></font></td></tr> | 49 <tr><td><font size="-1"> <a class="sidebar" href="http://sourceforge.net/pr
ojects/findbugs">SF project page</a></font></td></tr> |
49 <tr><td><font size="-1"> <a class="sidebar" href="http://code.google.com/p/
findbugs/source/browse/">Browse source</a></font></td></tr> | 50 <tr><td><font size="-1"> <a class="sidebar" href="http://code.google.com/p/
findbugs/source/browse/">Browse source</a></font></td></tr> |
50 <tr><td><font size="-1"> <a class="sidebar" href="http://code.google.com/p/
findbugs/source/list">Latest code changes</a></font></td></tr> | 51 <tr><td><font size="-1"> <a class="sidebar" href="http://code.google.com/p/
findbugs/source/list">Latest code changes</a></font></td></tr> |
51 </table> | 52 </table> |
52 </td> | 53 </td> |
53 <td align="left" valign="top"> | 54 <td align="left" valign="top"> |
54 <h1>FindBugs Bug Descriptions</h1> | 55 <h1>FindBugs Bug Descriptions</h1> |
55 <p>This document lists the standard bug patterns reported by | 56 <p>This document lists the standard bug patterns reported by |
56 <a href="http://findbugs.sourceforge.net">FindBugs</a> version 3.0.0.</p> | 57 <a href="http://findbugs.sourceforge.net">FindBugs</a> version 3.0.1.</p> |
57 <h2>Summary</h2> | 58 <h2>Summary</h2> |
58 <table width="100%"> | 59 <table width="100%"> |
59 <tr bgcolor="#b9b9fe"><th>Description</th><th>Category</th></tr> | 60 <tr bgcolor="#b9b9fe"><th>Description</th><th>Category</th></tr> |
60 <tr bgcolor="#eeeeee"><td><a href="#BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS
">BC: equals メソッドは引数の型を仮定するべきではない</a></td><td>Bad practice</td></tr> | 61 <tr bgcolor="#eeeeee"><td><a href="#BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS
">BC: equals メソッドは引数の型を仮定するべきではない</a></td><td>Bad practice</td></tr> |
61 <tr bgcolor="#ffffff"><td><a href="#BIT_SIGNED_CHECK">BIT: ビット演算の符号をチェックする</a></
td><td>Bad practice</td></tr> | 62 <tr bgcolor="#ffffff"><td><a href="#BIT_SIGNED_CHECK">BIT: ビット演算の符号をチェックする</a></
td><td>Bad practice</td></tr> |
62 <tr bgcolor="#eeeeee"><td><a href="#CN_IDIOM">CN: Cloneable を実装したクラスが clone メソッド
を定義していないか、使用していない</a></td><td>Bad practice</td></tr> | 63 <tr bgcolor="#eeeeee"><td><a href="#CN_IDIOM">CN: Cloneable を実装したクラスが clone メソッド
を定義していないか、使用していない</a></td><td>Bad practice</td></tr> |
63 <tr bgcolor="#ffffff"><td><a href="#CN_IDIOM_NO_SUPER_CALL">CN: clone メソッドが supe
r.clone() を呼び出していない</a></td><td>Bad practice</td></tr> | 64 <tr bgcolor="#ffffff"><td><a href="#CN_IDIOM_NO_SUPER_CALL">CN: clone メソッドが supe
r.clone() を呼び出していない</a></td><td>Bad practice</td></tr> |
64 <tr bgcolor="#eeeeee"><td><a href="#CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE">CN: C
loneable を実装していないクラスが clone メソッドを定義している</a></td><td>Bad practice</td></tr> | 65 <tr bgcolor="#eeeeee"><td><a href="#CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE">CN: C
loneable を実装していないクラスが clone メソッドを定義している</a></td><td>Bad practice</td></tr> |
65 <tr bgcolor="#ffffff"><td><a href="#CNT_ROUGH_CONSTANT_VALUE">CNT: 既知の定数の雑な値を見つけ
る</a></td><td>Bad practice</td></tr> | 66 <tr bgcolor="#ffffff"><td><a href="#CNT_ROUGH_CONSTANT_VALUE">CNT: 既知の定数の雑な値を見つけ
る</a></td><td>Bad practice</td></tr> |
66 <tr bgcolor="#eeeeee"><td><a href="#CO_ABSTRACT_SELF">Co: 抽象クラスは共変な compareTo メソ
ッドを定義している</a></td><td>Bad practice</td></tr> | 67 <tr bgcolor="#eeeeee"><td><a href="#CO_ABSTRACT_SELF">Co: 抽象クラスは共変な compareTo メソ
ッドを定義している</a></td><td>Bad practice</td></tr> |
| 68 <tr bgcolor="#ffffff"><td><a href="#CO_COMPARETO_INCORRECT_FLOATING">Co: compare
To()/compare() は間違って float または double 値を処理する</a></td><td>Bad practice</td></tr> |
| 69 <tr bgcolor="#eeeeee"><td><a href="#CO_COMPARETO_RESULTS_MIN_VALUE">Co: compareT
o()/compare() は Integer.MIN_VALUE を返す</a></td><td>Bad practice</td></tr> |
67 <tr bgcolor="#ffffff"><td><a href="#CO_SELF_NO_OBJECT">Co: 共変な compareTo メソッドの定義
</a></td><td>Bad practice</td></tr> | 70 <tr bgcolor="#ffffff"><td><a href="#CO_SELF_NO_OBJECT">Co: 共変な compareTo メソッドの定義
</a></td><td>Bad practice</td></tr> |
68 <tr bgcolor="#eeeeee"><td><a href="#DE_MIGHT_DROP">DE: 例外を捨てているかもしれないメソッド</a></t
d><td>Bad practice</td></tr> | 71 <tr bgcolor="#eeeeee"><td><a href="#DE_MIGHT_DROP">DE: 例外を捨てているかもしれないメソッド</a></t
d><td>Bad practice</td></tr> |
69 <tr bgcolor="#ffffff"><td><a href="#DE_MIGHT_IGNORE">DE: 例外を無視しているかもしれないメソッド</a>
</td><td>Bad practice</td></tr> | 72 <tr bgcolor="#ffffff"><td><a href="#DE_MIGHT_IGNORE">DE: 例外を無視しているかもしれないメソッド</a>
</td><td>Bad practice</td></tr> |
70 <tr bgcolor="#eeeeee"><td><a href="#DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS">DMI:
エントリセットの要素を加えることは、Entry オブジェクトの再利用のために失敗するかもしれない</a></td><td>Bad practice</td><
/tr> | 73 <tr bgcolor="#eeeeee"><td><a href="#DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS">DMI:
エントリセットの要素を加えることは、Entry オブジェクトの再利用のために失敗するかもしれない</a></td><td>Bad practice</td><
/tr> |
71 <tr bgcolor="#ffffff"><td><a href="#DMI_RANDOM_USED_ONLY_ONCE">DMI: Random オブジェク
トが作成され1度しか使われない</a></td><td>Bad practice</td></tr> | 74 <tr bgcolor="#ffffff"><td><a href="#DMI_RANDOM_USED_ONLY_ONCE">DMI: Random オブジェク
トが作成され1度しか使われない</a></td><td>Bad practice</td></tr> |
72 <tr bgcolor="#eeeeee"><td><a href="#DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION">DMI
: コレクションを消去するために removeAll メソッドを使用しない</a></td><td>Bad practice</td></tr> | 75 <tr bgcolor="#eeeeee"><td><a href="#DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION">DMI
: コレクションを消去するために removeAll メソッドを使用しない</a></td><td>Bad practice</td></tr> |
73 <tr bgcolor="#ffffff"><td><a href="#DM_EXIT">Dm: System.exit(...) を呼び出しているメソッド</
a></td><td>Bad practice</td></tr> | 76 <tr bgcolor="#ffffff"><td><a href="#DM_EXIT">Dm: System.exit(...) を呼び出しているメソッド</
a></td><td>Bad practice</td></tr> |
74 <tr bgcolor="#eeeeee"><td><a href="#DM_RUN_FINALIZERS_ON_EXIT">Dm: 危険なメソッド runFi
nalizersOnExit を呼び出しているメソッド</a></td><td>Bad practice</td></tr> | 77 <tr bgcolor="#eeeeee"><td><a href="#DM_RUN_FINALIZERS_ON_EXIT">Dm: 危険なメソッド runFi
nalizersOnExit を呼び出しているメソッド</a></td><td>Bad practice</td></tr> |
75 <tr bgcolor="#ffffff"><td><a href="#ES_COMPARING_PARAMETER_STRING_WITH_EQ">ES: S
tring パラメータを == や != を使用して比較している</a></td><td>Bad practice</td></tr> | 78 <tr bgcolor="#ffffff"><td><a href="#ES_COMPARING_PARAMETER_STRING_WITH_EQ">ES: S
tring パラメータを == や != を使用して比較している</a></td><td>Bad practice</td></tr> |
76 <tr bgcolor="#eeeeee"><td><a href="#ES_COMPARING_STRINGS_WITH_EQ">ES: String オブジ
ェクトを == や != を使用して比較している</a></td><td>Bad practice</td></tr> | 79 <tr bgcolor="#eeeeee"><td><a href="#ES_COMPARING_STRINGS_WITH_EQ">ES: String オブジ
ェクトを == や != を使用して比較している</a></td><td>Bad practice</td></tr> |
(...skipping 15 matching lines...) Expand all Loading... |
92 <tr bgcolor="#eeeeee"><td><a href="#HE_EQUALS_USE_HASHCODE">HE: equals メソッドを定義して
Object.hashCode() を使用しているクラス</a></td><td>Bad practice</td></tr> | 95 <tr bgcolor="#eeeeee"><td><a href="#HE_EQUALS_USE_HASHCODE">HE: equals メソッドを定義して
Object.hashCode() を使用しているクラス</a></td><td>Bad practice</td></tr> |
93 <tr bgcolor="#ffffff"><td><a href="#HE_HASHCODE_NO_EQUALS">HE: hashCode メソッドを定義し
ていますが equals メソッドは定義していないクラス</a></td><td>Bad practice</td></tr> | 96 <tr bgcolor="#ffffff"><td><a href="#HE_HASHCODE_NO_EQUALS">HE: hashCode メソッドを定義し
ていますが equals メソッドは定義していないクラス</a></td><td>Bad practice</td></tr> |
94 <tr bgcolor="#eeeeee"><td><a href="#HE_HASHCODE_USE_OBJECT_EQUALS">HE: hashCode
メソッドを定義して Object.equals() を使用しているクラス</a></td><td>Bad practice</td></tr> | 97 <tr bgcolor="#eeeeee"><td><a href="#HE_HASHCODE_USE_OBJECT_EQUALS">HE: hashCode
メソッドを定義して Object.equals() を使用しているクラス</a></td><td>Bad practice</td></tr> |
95 <tr bgcolor="#ffffff"><td><a href="#HE_INHERITS_EQUALS_USE_HASHCODE">HE: equals
メソッドを継承して Object.hashCode() を使用しているクラス</a></td><td>Bad practice</td></tr> | 98 <tr bgcolor="#ffffff"><td><a href="#HE_INHERITS_EQUALS_USE_HASHCODE">HE: equals
メソッドを継承して Object.hashCode() を使用しているクラス</a></td><td>Bad practice</td></tr> |
96 <tr bgcolor="#eeeeee"><td><a href="#IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZ
ATION">IC: スーパークラスは初期化中にサブクラスを使用している</a></td><td>Bad practice</td></tr> | 99 <tr bgcolor="#eeeeee"><td><a href="#IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZ
ATION">IC: スーパークラスは初期化中にサブクラスを使用している</a></td><td>Bad practice</td></tr> |
97 <tr bgcolor="#ffffff"><td><a href="#IMSE_DONT_CATCH_IMSE">IMSE: 疑わしい IllegalMoni
torStateException のキャッチ</a></td><td>Bad practice</td></tr> | 100 <tr bgcolor="#ffffff"><td><a href="#IMSE_DONT_CATCH_IMSE">IMSE: 疑わしい IllegalMoni
torStateException のキャッチ</a></td><td>Bad practice</td></tr> |
98 <tr bgcolor="#eeeeee"><td><a href="#ISC_INSTANTIATE_STATIC_CLASS">ISC: static メソ
ッドだけを提供するクラスの不必要なインスタンス化</a></td><td>Bad practice</td></tr> | 101 <tr bgcolor="#eeeeee"><td><a href="#ISC_INSTANTIATE_STATIC_CLASS">ISC: static メソ
ッドだけを提供するクラスの不必要なインスタンス化</a></td><td>Bad practice</td></tr> |
99 <tr bgcolor="#ffffff"><td><a href="#IT_NO_SUCH_ELEMENT">It: Iterator.next() が No
SuchElementException をスローできない</a></td><td>Bad practice</td></tr> | 102 <tr bgcolor="#ffffff"><td><a href="#IT_NO_SUCH_ELEMENT">It: Iterator.next() が No
SuchElementException をスローできない</a></td><td>Bad practice</td></tr> |
100 <tr bgcolor="#eeeeee"><td><a href="#J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_S
ESSION">J2EE: HttpSession への非直列化可能オブジェクトの格納</a></td><td>Bad practice</td></tr> | 103 <tr bgcolor="#eeeeee"><td><a href="#J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_S
ESSION">J2EE: HttpSession への非直列化可能オブジェクトの格納</a></td><td>Bad practice</td></tr> |
101 <tr bgcolor="#ffffff"><td><a href="#JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS">JC
IP: 不変クラスのフィールドは final にすべき</a></td><td>Bad practice</td></tr> | 104 <tr bgcolor="#ffffff"><td><a href="#JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS">JC
IP: 不変クラスのフィールドは final にすべき</a></td><td>Bad practice</td></tr> |
| 105 <tr bgcolor="#eeeeee"><td><a href="#ME_ENUM_FIELD_SETTER">ME: public 列挙型メソッドが無条件
にフィールドを設定するPublic enum method unconditionally sets its field</a></td><td>Bad pra
ctice</td></tr> |
| 106 <tr bgcolor="#ffffff"><td><a href="#ME_MUTABLE_ENUM_FIELD">ME: 列挙型フィールドは public
で可変である</a></td><td>Bad practice</td></tr> |
102 <tr bgcolor="#eeeeee"><td><a href="#NP_BOOLEAN_RETURN_NULL">NP: 戻り型が Boolean のメソ
ッドが明示的に null を返している</a></td><td>Bad practice</td></tr> | 107 <tr bgcolor="#eeeeee"><td><a href="#NP_BOOLEAN_RETURN_NULL">NP: 戻り型が Boolean のメソ
ッドが明示的に null を返している</a></td><td>Bad practice</td></tr> |
103 <tr bgcolor="#ffffff"><td><a href="#NP_CLONE_COULD_RETURN_NULL">NP: null を返すかもしれ
ない clone メソッド</a></td><td>Bad practice</td></tr> | 108 <tr bgcolor="#ffffff"><td><a href="#NP_CLONE_COULD_RETURN_NULL">NP: null を返すかもしれ
ない clone メソッド</a></td><td>Bad practice</td></tr> |
104 <tr bgcolor="#eeeeee"><td><a href="#NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT">NP: e
quals メソッドは null の引数をチェックしていない</a></td><td>Bad practice</td></tr> | 109 <tr bgcolor="#eeeeee"><td><a href="#NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT">NP: e
quals メソッドは null の引数をチェックしていない</a></td><td>Bad practice</td></tr> |
105 <tr bgcolor="#ffffff"><td><a href="#NP_TOSTRING_COULD_RETURN_NULL">NP: null を返すか
もしれない toString メソッド</a></td><td>Bad practice</td></tr> | 110 <tr bgcolor="#ffffff"><td><a href="#NP_TOSTRING_COULD_RETURN_NULL">NP: null を返すか
もしれない toString メソッド</a></td><td>Bad practice</td></tr> |
106 <tr bgcolor="#eeeeee"><td><a href="#NM_CLASS_NAMING_CONVENTION">Nm: クラス名は大文字から始め
るべき</a></td><td>Bad practice</td></tr> | 111 <tr bgcolor="#eeeeee"><td><a href="#NM_CLASS_NAMING_CONVENTION">Nm: クラス名は大文字から始め
るべき</a></td><td>Bad practice</td></tr> |
107 <tr bgcolor="#ffffff"><td><a href="#NM_CLASS_NOT_EXCEPTION">Nm: 例外クラスのように命名されている
が、クラスは Exception から派生されていない</a></td><td>Bad practice</td></tr> | 112 <tr bgcolor="#ffffff"><td><a href="#NM_CLASS_NOT_EXCEPTION">Nm: 例外クラスのように命名されている
が、クラスは Exception から派生されていない</a></td><td>Bad practice</td></tr> |
108 <tr bgcolor="#eeeeee"><td><a href="#NM_CONFUSING">Nm: 紛らわしい名前のメソッド</a></td><td>B
ad practice</td></tr> | 113 <tr bgcolor="#eeeeee"><td><a href="#NM_CONFUSING">Nm: 紛らわしい名前のメソッド</a></td><td>B
ad practice</td></tr> |
109 <tr bgcolor="#ffffff"><td><a href="#NM_FIELD_NAMING_CONVENTION">Nm: フィールド名は小文字から
始めるべき</a></td><td>Bad practice</td></tr> | 114 <tr bgcolor="#ffffff"><td><a href="#NM_FIELD_NAMING_CONVENTION">Nm: フィールド名は小文字から
始めるべき</a></td><td>Bad practice</td></tr> |
110 <tr bgcolor="#eeeeee"><td><a href="#NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER">Nm: Ja
va の後のバージョンのキーワードである識別子を使用している</a></td><td>Bad practice</td></tr> | 115 <tr bgcolor="#eeeeee"><td><a href="#NM_FUTURE_KEYWORD_USED_AS_IDENTIFIER">Nm: Ja
va の後のバージョンのキーワードである識別子を使用している</a></td><td>Bad practice</td></tr> |
111 <tr bgcolor="#ffffff"><td><a href="#NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER"
>Nm: Java の後のバージョンのキーワードである識別子を使用している</a></td><td>Bad practice</td></tr> | 116 <tr bgcolor="#ffffff"><td><a href="#NM_FUTURE_KEYWORD_USED_AS_MEMBER_IDENTIFIER"
>Nm: Java の後のバージョンのキーワードである識別子を使用している</a></td><td>Bad practice</td></tr> |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_DOWNCAST">BC: 不可能なダウンキャスト</a><
/td><td>Correctness</td></tr> | 150 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_DOWNCAST">BC: 不可能なダウンキャスト</a><
/td><td>Correctness</td></tr> |
146 <tr bgcolor="#eeeeee"><td><a href="#BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: toArr
ay メソッドの結果の不可能なダウンキャスト</a></td><td>Correctness</td></tr> | 151 <tr bgcolor="#eeeeee"><td><a href="#BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: toArr
ay メソッドの結果の不可能なダウンキャスト</a></td><td>Correctness</td></tr> |
147 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_INSTANCEOF">BC: 常に false を返す i
nstanceof</a></td><td>Correctness</td></tr> | 152 <tr bgcolor="#ffffff"><td><a href="#BC_IMPOSSIBLE_INSTANCEOF">BC: 常に false を返す i
nstanceof</a></td><td>Correctness</td></tr> |
148 <tr bgcolor="#eeeeee"><td><a href="#BIT_ADD_OF_SIGNED_BYTE">BIT: 符号付きバイト値のビット加算<
/a></td><td>Correctness</td></tr> | 153 <tr bgcolor="#eeeeee"><td><a href="#BIT_ADD_OF_SIGNED_BYTE">BIT: 符号付きバイト値のビット加算<
/a></td><td>Correctness</td></tr> |
149 <tr bgcolor="#ffffff"><td><a href="#BIT_AND">BIT: 互換性のないビットマスク</a></td><td>Corre
ctness</td></tr> | 154 <tr bgcolor="#ffffff"><td><a href="#BIT_AND">BIT: 互換性のないビットマスク</a></td><td>Corre
ctness</td></tr> |
150 <tr bgcolor="#eeeeee"><td><a href="#BIT_AND_ZZ">BIT: ((...) & 0) == 0 なのか確かめている<
/a></td><td>Correctness</td></tr> | 155 <tr bgcolor="#eeeeee"><td><a href="#BIT_AND_ZZ">BIT: ((...) & 0) == 0 なのか確かめている<
/a></td><td>Correctness</td></tr> |
151 <tr bgcolor="#ffffff"><td><a href="#BIT_IOR">BIT: 互換性のないビットマスク</a></td><td>Corre
ctness</td></tr> | 156 <tr bgcolor="#ffffff"><td><a href="#BIT_IOR">BIT: 互換性のないビットマスク</a></td><td>Corre
ctness</td></tr> |
152 <tr bgcolor="#eeeeee"><td><a href="#BIT_IOR_OF_SIGNED_BYTE">BIT: 符号付きバイト値のビット論理和
</a></td><td>Correctness</td></tr> | 157 <tr bgcolor="#eeeeee"><td><a href="#BIT_IOR_OF_SIGNED_BYTE">BIT: 符号付きバイト値のビット論理和
</a></td><td>Correctness</td></tr> |
153 <tr bgcolor="#ffffff"><td><a href="#BIT_SIGNED_CHECK_HIGH_BIT">BIT: ビット演算の符号をチェッ
クする</a></td><td>Correctness</td></tr> | 158 <tr bgcolor="#ffffff"><td><a href="#BIT_SIGNED_CHECK_HIGH_BIT">BIT: ビット演算の符号をチェッ
クする</a></td><td>Correctness</td></tr> |
154 <tr bgcolor="#eeeeee"><td><a href="#BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: スーパークラスの
Adapter で実装されるメソッドを誤ってオーバーライドしているクラス</a></td><td>Correctness</td></tr> | 159 <tr bgcolor="#eeeeee"><td><a href="#BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: スーパークラスの
Adapter で実装されるメソッドを誤ってオーバーライドしているクラス</a></td><td>Correctness</td></tr> |
155 <tr bgcolor="#ffffff"><td><a href="#ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32ビット int の-
31から31の範囲を超えた量によるシフト</a></td><td>Correctness</td></tr> | 160 <tr bgcolor="#ffffff"><td><a href="#BSHIFT_WRONG_ADD_PRIORITY">BSHIFT: シフト演算の正しく
ない構文解析の可能性がある</a></td><td>Correctness</td></tr> |
156 <tr bgcolor="#eeeeee"><td><a href="#BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR"
>Bx: プリミティブ値が3項演算子のためにアンボクシングされて、型変換される</a></td><td>Correctness</td></tr> | 161 <tr bgcolor="#eeeeee"><td><a href="#ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32ビット int の-
31から31の範囲を超えた量によるシフト</a></td><td>Correctness</td></tr> |
157 <tr bgcolor="#ffffff"><td><a href="#CO_COMPARETO_RESULTS_MIN_VALUE">Co: compareT
o()/compare() は Integer.MIN_VALUE を返す</a></td><td>Correctness</td></tr> | 162 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_LOCAL_INCREMENT_IN_RETURN">DLS: ret
urn 文に無駄なインクリメントがある</a></td><td>Correctness</td></tr> |
158 <tr bgcolor="#eeeeee"><td><a href="#DLS_DEAD_LOCAL_INCREMENT_IN_RETURN">DLS: ret
urn 文に役に立たないインクリメントがある</a></td><td>Correctness</td></tr> | 163 <tr bgcolor="#eeeeee"><td><a href="#DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: クラスリテラ
ルの無効な代入</a></td><td>Correctness</td></tr> |
159 <tr bgcolor="#ffffff"><td><a href="#DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: クラスリテラ
ルの無効な代入</a></td><td>Correctness</td></tr> | 164 <tr bgcolor="#ffffff"><td><a href="#DLS_OVERWRITTEN_INCREMENT">DLS: 上書きされたインクリメン
ト</a></td><td>Correctness</td></tr> |
160 <tr bgcolor="#eeeeee"><td><a href="#DLS_OVERWRITTEN_INCREMENT">DLS: 上書きされたインクリメン
ト</a></td><td>Correctness</td></tr> | 165 <tr bgcolor="#eeeeee"><td><a href="#DMI_ARGUMENTS_WRONG_ORDER">DMI: 逆にされた引数</a><
/td><td>Correctness</td></tr> |
161 <tr bgcolor="#ffffff"><td><a href="#DMI_ARGUMENTS_WRONG_ORDER">DMI: 逆にされた引数</a><
/td><td>Correctness</td></tr> | 166 <tr bgcolor="#ffffff"><td><a href="#DMI_BAD_MONTH">DMI: 月のための間違った定数値</a></td><td
>Correctness</td></tr> |
162 <tr bgcolor="#eeeeee"><td><a href="#DMI_BAD_MONTH">DMI: 月のための間違った定数値</a></td><td
>Correctness</td></tr> | 167 <tr bgcolor="#eeeeee"><td><a href="#DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE">DMI:
正確に表されない double から構築された BigDecimal</a></td><td>Correctness</td></tr> |
163 <tr bgcolor="#ffffff"><td><a href="#DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE">DMI:
正確に表されない double から構築された BigDecimal</a></td><td>Correctness</td></tr> | 168 <tr bgcolor="#ffffff"><td><a href="#DMI_CALLING_NEXT_FROM_HASNEXT">DMI: hasNext
メソッドで next メソッドを呼び出している</a></td><td>Correctness</td></tr> |
164 <tr bgcolor="#eeeeee"><td><a href="#DMI_CALLING_NEXT_FROM_HASNEXT">DMI: hasNext
メソッドで next メソッドを呼び出している</a></td><td>Correctness</td></tr> | 169 <tr bgcolor="#eeeeee"><td><a href="#DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVE
S">DMI: コレクションは自分自身を含めるべきではない</a></td><td>Correctness</td></tr> |
165 <tr bgcolor="#ffffff"><td><a href="#DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVE
S">DMI: コレクションは自分自身を含めるべきではない</a></td><td>Correctness</td></tr> | 170 <tr bgcolor="#ffffff"><td><a href="#DMI_DOH">DMI: D'oh! 無意味なメソッド呼び出し</a></td><td
>Correctness</td></tr> |
166 <tr bgcolor="#eeeeee"><td><a href="#DMI_DOH">DMI: D'oh! 無意味なメソッド呼び出し</a></td><td
>Correctness</td></tr> | 171 <tr bgcolor="#eeeeee"><td><a href="#DMI_INVOKING_HASHCODE_ON_ARRAY">DMI: 配列で has
hCode メソッドを呼び出している</a></td><td>Correctness</td></tr> |
167 <tr bgcolor="#ffffff"><td><a href="#DMI_INVOKING_HASHCODE_ON_ARRAY">DMI: 配列で has
hCode メソッドを呼び出している</a></td><td>Correctness</td></tr> | 172 <tr bgcolor="#ffffff"><td><a href="#DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT">DMI:
int に対して Double.longBitsToDouble() を呼び出している</a></td><td>Correctness</td></tr> |
168 <tr bgcolor="#eeeeee"><td><a href="#DMI_LONG_BITS_TO_DOUBLE_INVOKED_ON_INT">DMI:
int に対して Double.longBitsToDouble() を呼び出している</a></td><td>Correctness</td></tr> | 173 <tr bgcolor="#eeeeee"><td><a href="#DMI_VACUOUS_SELF_COLLECTION_CALL">DMI: コレクショ
ンへの無意味な呼び出し</a></td><td>Correctness</td></tr> |
169 <tr bgcolor="#ffffff"><td><a href="#DMI_VACUOUS_SELF_COLLECTION_CALL">DMI: コレクショ
ンへの無意味な呼び出し</a></td><td>Correctness</td></tr> | 174 <tr bgcolor="#ffffff"><td><a href="#DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION"
>Dm: ランタイムリテンションなしで、アノテーションの存在を調べるためにリフレクションを使用することはできない</a></td><td>Correctness
</td></tr> |
170 <tr bgcolor="#eeeeee"><td><a href="#DMI_ANNOTATION_IS_NOT_VISIBLE_TO_REFLECTION"
>Dm: ランタイムリテンションなしで、アノテーションの存在を調べるためにリフレクションを使用することはできない</a></td><td>Correctness
</td></tr> | 175 <tr bgcolor="#eeeeee"><td><a href="#DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF
_SCHEDULED_THREAD_POOL_EXECUTOR">Dm: ScheduledThreadPoolExecutor の最大プールサイズを変えようと
する無駄な試み</a></td><td>Correctness</td></tr> |
171 <tr bgcolor="#ffffff"><td><a href="#DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF
_SCHEDULED_THREAD_POOL_EXECUTOR">Dm: ScheduledThreadPoolExecutor の最大プールサイズを変えようと
する無駄な試み</a></td><td>Correctness</td></tr> | 176 <tr bgcolor="#ffffff"><td><a href="#DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO
_CORE_THREADS">Dm: コアプールサイズが0の ScheduledThreadPoolExecutor の作成</a></td><td>Corre
ctness</td></tr> |
172 <tr bgcolor="#eeeeee"><td><a href="#DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO
_CORE_THREADS">Dm: コアプールサイズが0の ScheduledThreadPoolExecutor の作成</a></td><td>Corre
ctness</td></tr> | 177 <tr bgcolor="#eeeeee"><td><a href="#DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD">Dm: Eas
yMock メソッドへの役に立たない/無意味な呼び出し</a></td><td>Correctness</td></tr> |
173 <tr bgcolor="#ffffff"><td><a href="#DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD">Dm: Eas
yMock メソッドへの役に立たない/無意味な呼び出し</a></td><td>Correctness</td></tr> | 178 <tr bgcolor="#ffffff"><td><a href="#DM_INVALID_MIN_MAX">Dm: Math.max と Math.min
の間違った組み合わせ</a></td><td>Correctness</td></tr> |
174 <tr bgcolor="#eeeeee"><td><a href="#EC_ARRAY_AND_NONARRAY">EC: equals メソッドを使用して配
列と非配列を比較している</a></td><td>Correctness</td></tr> | 179 <tr bgcolor="#eeeeee"><td><a href="#EC_ARRAY_AND_NONARRAY">EC: equals メソッドを使用して配
列と非配列を比較している</a></td><td>Correctness</td></tr> |
175 <tr bgcolor="#ffffff"><td><a href="#EC_BAD_ARRAY_COMPARE">EC: 配列の equals メソッド呼び出
しは == と等価である</a></td><td>Correctness</td></tr> | 180 <tr bgcolor="#ffffff"><td><a href="#EC_BAD_ARRAY_COMPARE">EC: 配列の equals メソッド呼び出
しは == と等価である</a></td><td>Correctness</td></tr> |
176 <tr bgcolor="#eeeeee"><td><a href="#EC_INCOMPATIBLE_ARRAY_COMPARE">EC: equals(..
.) メソッドを使用して互換性のない配列を比較している</a></td><td>Correctness</td></tr> | 181 <tr bgcolor="#eeeeee"><td><a href="#EC_INCOMPATIBLE_ARRAY_COMPARE">EC: equals(..
.) メソッドを使用して互換性のない配列を比較している</a></td><td>Correctness</td></tr> |
177 <tr bgcolor="#ffffff"><td><a href="#EC_NULL_ARG">EC: equals(null) の呼び出し</a></td>
<td>Correctness</td></tr> | 182 <tr bgcolor="#ffffff"><td><a href="#EC_NULL_ARG">EC: equals(null) の呼び出し</a></td>
<td>Correctness</td></tr> |
178 <tr bgcolor="#eeeeee"><td><a href="#EC_UNRELATED_CLASS_AND_INTERFACE">EC: equals
メソッドを呼び出して無関係のクラスとインタフェースを比較している</a></td><td>Correctness</td></tr> | 183 <tr bgcolor="#eeeeee"><td><a href="#EC_UNRELATED_CLASS_AND_INTERFACE">EC: equals
メソッドを呼び出して無関係のクラスとインタフェースを比較している</a></td><td>Correctness</td></tr> |
179 <tr bgcolor="#ffffff"><td><a href="#EC_UNRELATED_INTERFACES">EC: equals メソッドを呼び出
して異なる型のインタフェースを比較している</a></td><td>Correctness</td></tr> | 184 <tr bgcolor="#ffffff"><td><a href="#EC_UNRELATED_INTERFACES">EC: equals メソッドを呼び出
して異なる型のインタフェースを比較している</a></td><td>Correctness</td></tr> |
180 <tr bgcolor="#eeeeee"><td><a href="#EC_UNRELATED_TYPES">EC: equals メソッドを呼び出して異なる
型を比較している</a></td><td>Correctness</td></tr> | 185 <tr bgcolor="#eeeeee"><td><a href="#EC_UNRELATED_TYPES">EC: equals メソッドを呼び出して異なる
型を比較している</a></td><td>Correctness</td></tr> |
181 <tr bgcolor="#ffffff"><td><a href="#EC_UNRELATED_TYPES_USING_POINTER_EQUALITY">E
C: 参照等価性を使用して異なる型を比較している</a></td><td>Correctness</td></tr> | 186 <tr bgcolor="#ffffff"><td><a href="#EC_UNRELATED_TYPES_USING_POINTER_EQUALITY">E
C: 参照等価性を使用して異なる型を比較している</a></td><td>Correctness</td></tr> |
182 <tr bgcolor="#eeeeee"><td><a href="#EQ_ALWAYS_FALSE">Eq: equals メソッドは常に false を戻
す</a></td><td>Correctness</td></tr> | 187 <tr bgcolor="#eeeeee"><td><a href="#EQ_ALWAYS_FALSE">Eq: equals メソッドは常に false を戻
す</a></td><td>Correctness</td></tr> |
183 <tr bgcolor="#ffffff"><td><a href="#EQ_ALWAYS_TRUE">Eq: equals メソッドは常に true を返す<
/a></td><td>Correctness</td></tr> | 188 <tr bgcolor="#ffffff"><td><a href="#EQ_ALWAYS_TRUE">Eq: equals メソッドは常に true を返す<
/a></td><td>Correctness</td></tr> |
(...skipping 21 matching lines...) Expand all Loading... |
205 <tr bgcolor="#ffffff"><td><a href="#IJU_BAD_SUITE_METHOD">IJU: TestCase は suite
メソッドの間違った宣言をしている</a></td><td>Correctness</td></tr> | 210 <tr bgcolor="#ffffff"><td><a href="#IJU_BAD_SUITE_METHOD">IJU: TestCase は suite
メソッドの間違った宣言をしている</a></td><td>Correctness</td></tr> |
206 <tr bgcolor="#eeeeee"><td><a href="#IJU_NO_TESTS">IJU: TestCase はテストがない </a></td
><td>Correctness</td></tr> | 211 <tr bgcolor="#eeeeee"><td><a href="#IJU_NO_TESTS">IJU: TestCase はテストがない </a></td
><td>Correctness</td></tr> |
207 <tr bgcolor="#ffffff"><td><a href="#IJU_SETUP_NO_SUPER">IJU: TestCase は super.se
tup() を呼び出さない setUp メソッドを実装している</a></td><td>Correctness</td></tr> | 212 <tr bgcolor="#ffffff"><td><a href="#IJU_SETUP_NO_SUPER">IJU: TestCase は super.se
tup() を呼び出さない setUp メソッドを実装している</a></td><td>Correctness</td></tr> |
208 <tr bgcolor="#eeeeee"><td><a href="#IJU_SUITE_NOT_STATIC">IJU: TestCase は 非 stat
ic な suite メソッドを実装している</a></td><td>Correctness</td></tr> | 213 <tr bgcolor="#eeeeee"><td><a href="#IJU_SUITE_NOT_STATIC">IJU: TestCase は 非 stat
ic な suite メソッドを実装している</a></td><td>Correctness</td></tr> |
209 <tr bgcolor="#ffffff"><td><a href="#IJU_TEARDOWN_NO_SUPER">IJU: TestCase は super
.tearDown() を呼び出さない tearDown メソッドを実装している </a></td><td>Correctness</td></tr> | 214 <tr bgcolor="#ffffff"><td><a href="#IJU_TEARDOWN_NO_SUPER">IJU: TestCase は super
.tearDown() を呼び出さない tearDown メソッドを実装している </a></td><td>Correctness</td></tr> |
210 <tr bgcolor="#eeeeee"><td><a href="#IL_CONTAINER_ADDED_TO_ITSELF">IL: コレクションは自分自
身を追加している</a></td><td>Correctness</td></tr> | 215 <tr bgcolor="#eeeeee"><td><a href="#IL_CONTAINER_ADDED_TO_ITSELF">IL: コレクションは自分自
身を追加している</a></td><td>Correctness</td></tr> |
211 <tr bgcolor="#ffffff"><td><a href="#IL_INFINITE_LOOP">IL: 明らかな無限ループ</a></td><td>
Correctness</td></tr> | 216 <tr bgcolor="#ffffff"><td><a href="#IL_INFINITE_LOOP">IL: 明らかな無限ループ</a></td><td>
Correctness</td></tr> |
212 <tr bgcolor="#eeeeee"><td><a href="#IL_INFINITE_RECURSIVE_LOOP">IL: 明らかな無限再帰ループ<
/a></td><td>Correctness</td></tr> | 217 <tr bgcolor="#eeeeee"><td><a href="#IL_INFINITE_RECURSIVE_LOOP">IL: 明らかな無限再帰ループ<
/a></td><td>Correctness</td></tr> |
213 <tr bgcolor="#ffffff"><td><a href="#IM_MULTIPLYING_RESULT_OF_IREM">IM: 整数剰余の結果の整
数乗算</a></td><td>Correctness</td></tr> | 218 <tr bgcolor="#ffffff"><td><a href="#IM_MULTIPLYING_RESULT_OF_IREM">IM: 整数剰余の結果の整
数乗算</a></td><td>Correctness</td></tr> |
214 <tr bgcolor="#eeeeee"><td><a href="#INT_BAD_COMPARISON_WITH_INT_VALUE">INT: int
値と long 定数との間違った比較</a></td><td>Correctness</td></tr> | 219 <tr bgcolor="#eeeeee"><td><a href="#INT_BAD_COMPARISON_WITH_INT_VALUE">INT: int
値と long 定数との間違った比較</a></td><td>Correctness</td></tr> |
215 <tr bgcolor="#ffffff"><td><a href="#INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE">I
NT: 負でない値と負の定数との間違った比較</a></td><td>Correctness</td></tr> | 220 <tr bgcolor="#ffffff"><td><a href="#INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE">I
NT: 負でない値と負の定数またはゼロとの間違った比較</a></td><td>Correctness</td></tr> |
216 <tr bgcolor="#eeeeee"><td><a href="#INT_BAD_COMPARISON_WITH_SIGNED_BYTE">INT: 符号
付きバイトの間違った比較</a></td><td>Correctness</td></tr> | 221 <tr bgcolor="#eeeeee"><td><a href="#INT_BAD_COMPARISON_WITH_SIGNED_BYTE">INT: 符号
付きバイトの間違った比較</a></td><td>Correctness</td></tr> |
217 <tr bgcolor="#ffffff"><td><a href="#IO_APPENDING_TO_OBJECT_OUTPUT_STREAM">IO: オブ
ジェクト出力ストリームへの追加は失敗に終わる</a></td><td>Correctness</td></tr> | 222 <tr bgcolor="#ffffff"><td><a href="#IO_APPENDING_TO_OBJECT_OUTPUT_STREAM">IO: オブ
ジェクト出力ストリームへの追加は失敗に終わる</a></td><td>Correctness</td></tr> |
218 <tr bgcolor="#eeeeee"><td><a href="#IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN">IP: メソ
ッドで読み取られずに上書きされているパラメータ</a></td><td>Correctness</td></tr> | 223 <tr bgcolor="#eeeeee"><td><a href="#IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN">IP: メソ
ッドで読み取られずに上書きされているパラメータ</a></td><td>Correctness</td></tr> |
219 <tr bgcolor="#ffffff"><td><a href="#MF_CLASS_MASKS_FIELD">MF: スーパークラスのフィールドを隠すフィ
ールドを定義しているクラス</a></td><td>Correctness</td></tr> | 224 <tr bgcolor="#ffffff"><td><a href="#MF_CLASS_MASKS_FIELD">MF: スーパークラスのフィールドを隠すフィ
ールドを定義しているクラス</a></td><td>Correctness</td></tr> |
220 <tr bgcolor="#eeeeee"><td><a href="#MF_METHOD_MASKS_FIELD">MF: フィールドを隠す変数を定義している
メソッド</a></td><td>Correctness</td></tr> | 225 <tr bgcolor="#eeeeee"><td><a href="#MF_METHOD_MASKS_FIELD">MF: フィールドを隠す変数を定義している
メソッド</a></td><td>Correctness</td></tr> |
221 <tr bgcolor="#ffffff"><td><a href="#NP_ALWAYS_NULL">NP: null 値を利用している</a></td><t
d>Correctness</td></tr> | 226 <tr bgcolor="#ffffff"><td><a href="#NP_ALWAYS_NULL">NP: null 値を利用している</a></td><t
d>Correctness</td></tr> |
222 <tr bgcolor="#eeeeee"><td><a href="#NP_ALWAYS_NULL_EXCEPTION">NP: null 値を例外経路で利用
している</a></td><td>Correctness</td></tr> | 227 <tr bgcolor="#eeeeee"><td><a href="#NP_ALWAYS_NULL_EXCEPTION">NP: null 値を例外経路で利用
している</a></td><td>Correctness</td></tr> |
223 <tr bgcolor="#ffffff"><td><a href="#NP_ARGUMENT_MIGHT_BE_NULL">NP: null の引数をチェック
していないメソッド</a></td><td>Correctness</td></tr> | 228 <tr bgcolor="#ffffff"><td><a href="#NP_ARGUMENT_MIGHT_BE_NULL">NP: null の引数をチェック
していないメソッド</a></td><td>Correctness</td></tr> |
224 <tr bgcolor="#eeeeee"><td><a href="#NP_CLOSING_NULL">NP: 常に null 値のオブジェクトで close
メソッドを呼び出している</a></td><td>Correctness</td></tr> | 229 <tr bgcolor="#eeeeee"><td><a href="#NP_CLOSING_NULL">NP: 常に null 値のオブジェクトで close
メソッドを呼び出している</a></td><td>Correctness</td></tr> |
225 <tr bgcolor="#ffffff"><td><a href="#NP_GUARANTEED_DEREF">NP: null 値を利用することが保証されて
いる</a></td><td>Correctness</td></tr> | 230 <tr bgcolor="#ffffff"><td><a href="#NP_GUARANTEED_DEREF">NP: null 値を利用することが保証されて
いる</a></td><td>Correctness</td></tr> |
226 <tr bgcolor="#eeeeee"><td><a href="#NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH">NP: n
ull 値を例外経路で利用することが保証されている</a></td><td>Correctness</td></tr> | 231 <tr bgcolor="#eeeeee"><td><a href="#NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH">NP: n
ull 値を例外経路で利用することが保証されている</a></td><td>Correctness</td></tr> |
227 <tr bgcolor="#ffffff"><td><a href="#NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUC
TOR">NP: 非 null フィールドは初期化されていない</a></td><td>Correctness</td></tr> | 232 <tr bgcolor="#ffffff"><td><a href="#NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUC
TOR">NP: 非 null フィールドは初期化されていない</a></td><td>Correctness</td></tr> |
228 <tr bgcolor="#eeeeee"><td><a href="#NP_NONNULL_PARAM_VIOLATION">NP: メソッド呼び出しは非 n
ull パラメータに対して null を渡している</a></td><td>Correctness</td></tr> | 233 <tr bgcolor="#eeeeee"><td><a href="#NP_NONNULL_PARAM_VIOLATION">NP: メソッド呼び出しは非 n
ull パラメータに対して null を渡している</a></td><td>Correctness</td></tr> |
229 <tr bgcolor="#ffffff"><td><a href="#NP_NONNULL_RETURN_VIOLATION">NP: null を返すかもし
れないメソッドが @NonNull 宣言されている</a></td><td>Correctness</td></tr> | 234 <tr bgcolor="#ffffff"><td><a href="#NP_NONNULL_RETURN_VIOLATION">NP: null を返すかもし
れないメソッドが @Nonnull 宣言されている</a></td><td>Correctness</td></tr> |
230 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_INSTANCEOF">NP: null とわかっている値をその型のイン
スタンスなのか確かめている</a></td><td>Correctness</td></tr> | 235 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_INSTANCEOF">NP: null とわかっている値をその型のイン
スタンスなのか確かめている</a></td><td>Correctness</td></tr> |
231 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_ON_SOME_PATH">NP: null 値を利用している可能性があ
る</a></td><td>Correctness</td></tr> | 236 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_ON_SOME_PATH">NP: null 値を利用している可能性があ
る</a></td><td>Correctness</td></tr> |
232 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_ON_SOME_PATH_EXCEPTION">NP: null 値を例
外経路で利用している可能性がある</a></td><td>Correctness</td></tr> | 237 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_ON_SOME_PATH_EXCEPTION">NP: null 値を例
外経路で利用している可能性がある</a></td><td>Correctness</td></tr> |
233 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_PARAM_DEREF">NP: メソッド呼び出しは非 null パラメ
ータに対して null を渡している</a></td><td>Correctness</td></tr> | 238 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_PARAM_DEREF">NP: メソッド呼び出しは非 null パラメ
ータに対して null を渡している</a></td><td>Correctness</td></tr> |
234 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS">N
P: メソッド呼び出しは非 null パラメータに対して null を渡している</a></td><td>Correctness</td></tr> | 239 <tr bgcolor="#eeeeee"><td><a href="#NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS">N
P: メソッド呼び出しは非 null パラメータに対して null を渡している</a></td><td>Correctness</td></tr> |
235 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_PARAM_DEREF_NONVIRTUAL">NP: 非 null パ
ラメータに null を渡している非仮想メソッドの呼び出し</a></td><td>Correctness</td></tr> | 240 <tr bgcolor="#ffffff"><td><a href="#NP_NULL_PARAM_DEREF_NONVIRTUAL">NP: 非 null パ
ラメータに null を渡している非仮想メソッドの呼び出し</a></td><td>Correctness</td></tr> |
236 <tr bgcolor="#eeeeee"><td><a href="#NP_OPTIONAL_RETURN_NULL">NP: Optional の戻り型を持
つメソッドが明示的に null を返す</a></td><td>Correctness</td></tr> | 241 <tr bgcolor="#eeeeee"><td><a href="#NP_OPTIONAL_RETURN_NULL">NP: Optional の戻り型を持
つメソッドが明示的に null を返す</a></td><td>Correctness</td></tr> |
237 <tr bgcolor="#ffffff"><td><a href="#NP_STORE_INTO_NONNULL_FIELD">NP: @NonNull でア
ノテートされたフィールドに null を格納している</a></td><td>Correctness</td></tr> | 242 <tr bgcolor="#ffffff"><td><a href="#NP_STORE_INTO_NONNULL_FIELD">NP: @Nonnull でア
ノテートされたフィールドに null を格納している</a></td><td>Correctness</td></tr> |
238 <tr bgcolor="#eeeeee"><td><a href="#NP_UNWRITTEN_FIELD">NP: 書き込まれていないフィールドの読み出し<
/a></td><td>Correctness</td></tr> | 243 <tr bgcolor="#eeeeee"><td><a href="#NP_UNWRITTEN_FIELD">NP: 書き込まれていないフィールドの読み出し<
/a></td><td>Correctness</td></tr> |
239 <tr bgcolor="#ffffff"><td><a href="#NM_BAD_EQUAL">Nm: クラスは equal(Object) を定義していま
す。equals(Object) にすべきですか?</a></td><td>Correctness</td></tr> | 244 <tr bgcolor="#ffffff"><td><a href="#NM_BAD_EQUAL">Nm: クラスは equal(Object) を定義していま
す。equals(Object) にすべきですか?</a></td><td>Correctness</td></tr> |
240 <tr bgcolor="#eeeeee"><td><a href="#NM_LCASE_HASHCODE">Nm: クラスは hashcode() を定義して
います。hashCode() にすべきですか?</a></td><td>Correctness</td></tr> | 245 <tr bgcolor="#eeeeee"><td><a href="#NM_LCASE_HASHCODE">Nm: クラスは hashcode() を定義して
います。hashCode() にすべきですか?</a></td><td>Correctness</td></tr> |
241 <tr bgcolor="#ffffff"><td><a href="#NM_LCASE_TOSTRING">Nm: クラスは tostring() を定義して
います。toString() にすべきですか?</a></td><td>Correctness</td></tr> | 246 <tr bgcolor="#ffffff"><td><a href="#NM_LCASE_TOSTRING">Nm: クラスは tostring() を定義して
います。toString() にすべきですか?</a></td><td>Correctness</td></tr> |
242 <tr bgcolor="#eeeeee"><td><a href="#NM_METHOD_CONSTRUCTOR_CONFUSION">Nm: 明らかなメソッ
ドとコンストラクタの混乱</a></td><td>Correctness</td></tr> | 247 <tr bgcolor="#eeeeee"><td><a href="#NM_METHOD_CONSTRUCTOR_CONFUSION">Nm: 明らかなメソッ
ドとコンストラクタの混乱</a></td><td>Correctness</td></tr> |
243 <tr bgcolor="#ffffff"><td><a href="#NM_VERY_CONFUSING">Nm: 非常に紛らわしい名前のメソッド</a></
td><td>Correctness</td></tr> | 248 <tr bgcolor="#ffffff"><td><a href="#NM_VERY_CONFUSING">Nm: 非常に紛らわしい名前のメソッド</a></
td><td>Correctness</td></tr> |
244 <tr bgcolor="#eeeeee"><td><a href="#NM_WRONG_PACKAGE">Nm: パラメータの間違ったパッケージのために、スー
パークラスのメソッドをオーバーライドしていないメソッド</a></td><td>Correctness</td></tr> | 249 <tr bgcolor="#eeeeee"><td><a href="#NM_WRONG_PACKAGE">Nm: パラメータの間違ったパッケージのためにスーパ
ークラスのメソッドをオーバーライドしていないメソッド</a></td><td>Correctness</td></tr> |
245 <tr bgcolor="#ffffff"><td><a href="#QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT">QBA: 論理
式で boolean リテラル値を代入しているメソッド</a></td><td>Correctness</td></tr> | 250 <tr bgcolor="#ffffff"><td><a href="#QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT">QBA: 論理
式で boolean リテラル値を代入しているメソッド</a></td><td>Correctness</td></tr> |
| 251 <tr bgcolor="#eeeeee"><td><a href="#RANGE_ARRAY_INDEX">RANGE: 配列インデックスは範囲外</a></
td><td>Correctness</td></tr> |
| 252 <tr bgcolor="#ffffff"><td><a href="#RANGE_ARRAY_LENGTH">RANGE: 配列の長さは範囲外</a></td
><td>Correctness</td></tr> |
| 253 <tr bgcolor="#eeeeee"><td><a href="#RANGE_ARRAY_OFFSET">RANGE: 配列オフセットは範囲外</a></
td><td>Correctness</td></tr> |
| 254 <tr bgcolor="#ffffff"><td><a href="#RANGE_STRING_INDEX">RANGE: 文字列インデックスは範囲外</a>
</td><td>Correctness</td></tr> |
246 <tr bgcolor="#eeeeee"><td><a href="#RC_REF_COMPARISON">RC: 疑わしい参照比較</a></td><td>
Correctness</td></tr> | 255 <tr bgcolor="#eeeeee"><td><a href="#RC_REF_COMPARISON">RC: 疑わしい参照比較</a></td><td>
Correctness</td></tr> |
247 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NP
E">RCN: すでに利用していた値の null チェック</a></td><td>Correctness</td></tr> | 256 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NP
E">RCN: 既に利用していた値の null チェック</a></td><td>Correctness</td></tr> |
248 <tr bgcolor="#eeeeee"><td><a href="#RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION">RE: 正規
表現のための無効な構文</a></td><td>Correctness</td></tr> | 257 <tr bgcolor="#eeeeee"><td><a href="#RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION">RE: 正規
表現のための無効な構文</a></td><td>Correctness</td></tr> |
249 <tr bgcolor="#ffffff"><td><a href="#RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRES
SION">RE: 正規表現のために使われている File.separator</a></td><td>Correctness</td></tr> | 258 <tr bgcolor="#ffffff"><td><a href="#RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRES
SION">RE: 正規表現のために使われている File.separator</a></td><td>Correctness</td></tr> |
250 <tr bgcolor="#eeeeee"><td><a href="#RE_POSSIBLE_UNINTENDED_PATTERN">RE: 正規表現のために
使われている "." または "|"</a></td><td>Correctness</td></tr> | 259 <tr bgcolor="#eeeeee"><td><a href="#RE_POSSIBLE_UNINTENDED_PATTERN">RE: 正規表現のために
使われている "." または "|"</a></td><td>Correctness</td></tr> |
251 <tr bgcolor="#ffffff"><td><a href="#RV_01_TO_INT">RV: 0から1の乱数値は整数値0に丸められる</a></t
d><td>Correctness</td></tr> | 260 <tr bgcolor="#ffffff"><td><a href="#RV_01_TO_INT">RV: 0から1の乱数値は整数値0に丸められる</a></t
d><td>Correctness</td></tr> |
252 <tr bgcolor="#eeeeee"><td><a href="#RV_ABSOLUTE_VALUE_OF_HASHCODE">RV: 符号付き32ビット
ハッシュコードの絶対値を計算する間違った試み</a></td><td>Correctness</td></tr> | 261 <tr bgcolor="#eeeeee"><td><a href="#RV_ABSOLUTE_VALUE_OF_HASHCODE">RV: 符号付き32ビット
ハッシュコードの絶対値を計算する間違った試み</a></td><td>Correctness</td></tr> |
253 <tr bgcolor="#ffffff"><td><a href="#RV_ABSOLUTE_VALUE_OF_RANDOM_INT">RV: 符号付き整数の
乱数の絶対値を計算する間違った試み</a></td><td>Correctness</td></tr> | 262 <tr bgcolor="#ffffff"><td><a href="#RV_ABSOLUTE_VALUE_OF_RANDOM_INT">RV: 符号付き整数の
乱数の絶対値を計算する間違った試み</a></td><td>Correctness</td></tr> |
254 <tr bgcolor="#eeeeee"><td><a href="#RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE
">RV: compareTo によって返された特定の値のコードチェック</a></td><td>Correctness</td></tr> | 263 <tr bgcolor="#eeeeee"><td><a href="#RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE
">RV: compareTo によって返された特定の値のコードチェック</a></td><td>Correctness</td></tr> |
255 <tr bgcolor="#ffffff"><td><a href="#RV_EXCEPTION_NOT_THROWN">RV: 作成した例外をスローするのでは
なく捨てている</a></td><td>Correctness</td></tr> | 264 <tr bgcolor="#ffffff"><td><a href="#RV_EXCEPTION_NOT_THROWN">RV: 作成した例外をスローするのでは
なく捨てている</a></td><td>Correctness</td></tr> |
256 <tr bgcolor="#eeeeee"><td><a href="#RV_RETURN_VALUE_IGNORED">RV: 戻り値を無視しているメソッド<
/a></td><td>Correctness</td></tr> | 265 <tr bgcolor="#eeeeee"><td><a href="#RV_RETURN_VALUE_IGNORED">RV: 戻り値を無視しているメソッド<
/a></td><td>Correctness</td></tr> |
257 <tr bgcolor="#ffffff"><td><a href="#RpC_REPEATED_CONDITIONAL_TEST">RpC: 条件テストの繰り
返し</a></td><td>Correctness</td></tr> | 266 <tr bgcolor="#ffffff"><td><a href="#RpC_REPEATED_CONDITIONAL_TEST">RpC: 条件テストの繰り
返し</a></td><td>Correctness</td></tr> |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 <tr bgcolor="#eeeeee"><td><a href="#OBL_UNSATISFIED_OBLIGATION">OBL: ストリームやリソースの
クリーンアップに失敗するかもしれないメソッド</a></td><td>Experimental</td></tr> | 299 <tr bgcolor="#eeeeee"><td><a href="#OBL_UNSATISFIED_OBLIGATION">OBL: ストリームやリソースの
クリーンアップに失敗するかもしれないメソッド</a></td><td>Experimental</td></tr> |
291 <tr bgcolor="#ffffff"><td><a href="#OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE">O
BL: チェック例外でストリームやリソースのクリーンアップに失敗するかもしれないメソッド</a></td><td>Experimental</td></tr> | 300 <tr bgcolor="#ffffff"><td><a href="#OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE">O
BL: チェック例外でストリームやリソースのクリーンアップに失敗するかもしれないメソッド</a></td><td>Experimental</td></tr> |
292 <tr bgcolor="#eeeeee"><td><a href="#DM_CONVERT_CASE">Dm: 呼び出したメソッドの Locale パラメータ
の使用を検討する</a></td><td>Internationalization</td></tr> | 301 <tr bgcolor="#eeeeee"><td><a href="#DM_CONVERT_CASE">Dm: 呼び出したメソッドの Locale パラメータ
の使用を検討する</a></td><td>Internationalization</td></tr> |
293 <tr bgcolor="#ffffff"><td><a href="#DM_DEFAULT_ENCODING">Dm: デフォルトエンコーディングへの依存</
a></td><td>Internationalization</td></tr> | 302 <tr bgcolor="#ffffff"><td><a href="#DM_DEFAULT_ENCODING">Dm: デフォルトエンコーディングへの依存</
a></td><td>Internationalization</td></tr> |
294 <tr bgcolor="#eeeeee"><td><a href="#DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED">
DP: doPrivileged ブロック内で作成されるべきクラスローダ</a></td><td>Malicious code vulnerability</t
d></tr> | 303 <tr bgcolor="#eeeeee"><td><a href="#DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED">
DP: doPrivileged ブロック内で作成されるべきクラスローダ</a></td><td>Malicious code vulnerability</t
d></tr> |
295 <tr bgcolor="#ffffff"><td><a href="#DP_DO_INSIDE_DO_PRIVILEGED">DP: doPrivileged
ブロック内で呼び出すべきメソッド</a></td><td>Malicious code vulnerability</td></tr> | 304 <tr bgcolor="#ffffff"><td><a href="#DP_DO_INSIDE_DO_PRIVILEGED">DP: doPrivileged
ブロック内で呼び出すべきメソッド</a></td><td>Malicious code vulnerability</td></tr> |
296 <tr bgcolor="#eeeeee"><td><a href="#EI_EXPOSE_REP">EI: 可変オブジェクトへの参照を返すことによって内部表現
を暴露するかもしれないメソッド</a></td><td>Malicious code vulnerability</td></tr> | 305 <tr bgcolor="#eeeeee"><td><a href="#EI_EXPOSE_REP">EI: 可変オブジェクトへの参照を返すことによって内部表現
を暴露するかもしれないメソッド</a></td><td>Malicious code vulnerability</td></tr> |
297 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_REP2">EI2: 可変オブジェクトへの参照を取り込むことによって
内部表現を暴露するかもしれないメソッド</a></td><td>Malicious code vulnerability</td></tr> | 306 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_REP2">EI2: 可変オブジェクトへの参照を取り込むことによって
内部表現を暴露するかもしれないメソッド</a></td><td>Malicious code vulnerability</td></tr> |
298 <tr bgcolor="#eeeeee"><td><a href="#FI_PUBLIC_SHOULD_BE_PROTECTED">FI: ファイナライザは
public ではなく protected にすべき</a></td><td>Malicious code vulnerability</td></tr> | 307 <tr bgcolor="#eeeeee"><td><a href="#FI_PUBLIC_SHOULD_BE_PROTECTED">FI: ファイナライザは
public ではなく protected にすべき</a></td><td>Malicious code vulnerability</td></tr> |
299 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_STATIC_REP2">MS: static フィールドに可変オブ
ジェクトを格納することによって、内部の静的状態を暴露するかもしれないメソッド</a></td><td>Malicious code vulnerability<
/td></tr> | 308 <tr bgcolor="#ffffff"><td><a href="#EI_EXPOSE_STATIC_REP2">MS: static フィールドに可変オブ
ジェクトを格納することによって、内部の静的状態を暴露するかもしれないメソッド</a></td><td>Malicious code vulnerability<
/td></tr> |
300 <tr bgcolor="#eeeeee"><td><a href="#MS_CANNOT_BE_FINAL">MS: final でないフィールドは悪質なコー
ドから保護できない</a></td><td>Malicious code vulnerability</td></tr> | 309 <tr bgcolor="#eeeeee"><td><a href="#MS_CANNOT_BE_FINAL">MS: final でないフィールドは悪意のある
コードから保護できない</a></td><td>Malicious code vulnerability</td></tr> |
301 <tr bgcolor="#ffffff"><td><a href="#MS_EXPOSE_REP">MS: 配列を返すことによって内部表現を暴露するかもしれな
い public static メソッド</a></td><td>Malicious code vulnerability</td></tr> | 310 <tr bgcolor="#ffffff"><td><a href="#MS_EXPOSE_REP">MS: 配列を返すことによって内部表現を暴露するかもしれな
い public static メソッド</a></td><td>Malicious code vulnerability</td></tr> |
302 <tr bgcolor="#eeeeee"><td><a href="#MS_FINAL_PKGPROTECT">MS: final かつパッケージプロテクテッ
ドにすべきフィールド</a></td><td>Malicious code vulnerability</td></tr> | 311 <tr bgcolor="#eeeeee"><td><a href="#MS_FINAL_PKGPROTECT">MS: final かつパッケージプロテクテッ
ドにすべきフィールド</a></td><td>Malicious code vulnerability</td></tr> |
303 <tr bgcolor="#ffffff"><td><a href="#MS_MUTABLE_ARRAY">MS: 可変配列のフィールド</a></td><td
>Malicious code vulnerability</td></tr> | 312 <tr bgcolor="#ffffff"><td><a href="#MS_MUTABLE_ARRAY">MS: 可変配列のフィールド</a></td><td
>Malicious code vulnerability</td></tr> |
| 313 <tr bgcolor="#eeeeee"><td><a href="#MS_MUTABLE_COLLECTION">MS: 可変コレクションのフィールド</a
></td><td>Malicious code vulnerability</td></tr> |
| 314 <tr bgcolor="#ffffff"><td><a href="#MS_MUTABLE_COLLECTION_PKGPROTECT">MS: パッケージプ
ロテクテッドにすべき可変コレクションのフィールド</a></td><td>Malicious code vulnerability</td></tr> |
304 <tr bgcolor="#eeeeee"><td><a href="#MS_MUTABLE_HASHTABLE">MS: 可変 Hashtable のフィール
ド</a></td><td>Malicious code vulnerability</td></tr> | 315 <tr bgcolor="#eeeeee"><td><a href="#MS_MUTABLE_HASHTABLE">MS: 可変 Hashtable のフィール
ド</a></td><td>Malicious code vulnerability</td></tr> |
305 <tr bgcolor="#ffffff"><td><a href="#MS_OOI_PKGPROTECT">MS: インタフェースから移動してパッケージプロテ
クテッドにすべきフィールド</a></td><td>Malicious code vulnerability</td></tr> | 316 <tr bgcolor="#ffffff"><td><a href="#MS_OOI_PKGPROTECT">MS: インタフェースから移動してパッケージプロテ
クテッドにすべきフィールド</a></td><td>Malicious code vulnerability</td></tr> |
306 <tr bgcolor="#eeeeee"><td><a href="#MS_PKGPROTECT">MS: パッケージプロテクテッドにすべきフィールド</a>
</td><td>Malicious code vulnerability</td></tr> | 317 <tr bgcolor="#eeeeee"><td><a href="#MS_PKGPROTECT">MS: パッケージプロテクテッドにすべきフィールド</a>
</td><td>Malicious code vulnerability</td></tr> |
307 <tr bgcolor="#ffffff"><td><a href="#MS_SHOULD_BE_FINAL">MS: final にすべきフィールド</a><
/td><td>Malicious code vulnerability</td></tr> | 318 <tr bgcolor="#ffffff"><td><a href="#MS_SHOULD_BE_FINAL">MS: final にすべきフィールド</a><
/td><td>Malicious code vulnerability</td></tr> |
308 <tr bgcolor="#eeeeee"><td><a href="#MS_SHOULD_BE_REFACTORED_TO_BE_FINAL">MS: fin
al でないフィールドはリファクタリングするべき</a></td><td>Malicious code vulnerability</td></tr> | 319 <tr bgcolor="#eeeeee"><td><a href="#MS_SHOULD_BE_REFACTORED_TO_BE_FINAL">MS: fin
al でないフィールドはリファクタリングするべき</a></td><td>Malicious code vulnerability</td></tr> |
309 <tr bgcolor="#ffffff"><td><a href="#AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACT
ION">AT: 並行抽象の呼び出しシーケンスはアトミックではないかもしれない</a></td><td>Multithreaded correctness</t
d></tr> | 320 <tr bgcolor="#ffffff"><td><a href="#AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACT
ION">AT: 並行抽象の呼び出しシーケンスはアトミックではないかもしれない</a></td><td>Multithreaded correctness</t
d></tr> |
310 <tr bgcolor="#eeeeee"><td><a href="#DC_DOUBLECHECK">DC: フィールドのダブルチェックの可能性</a></t
d><td>Multithreaded correctness</td></tr> | 321 <tr bgcolor="#eeeeee"><td><a href="#DC_DOUBLECHECK">DC: フィールドのダブルチェックの可能性</a></t
d><td>Multithreaded correctness</td></tr> |
311 <tr bgcolor="#ffffff"><td><a href="#DL_SYNCHRONIZATION_ON_BOOLEAN">DL: Boolean の
同期化</a></td><td>Multithreaded correctness</td></tr> | 322 <tr bgcolor="#ffffff"><td><a href="#DC_PARTIALLY_CONSTRUCTED">DC: 部分的に初期化されたオブジェ
クトを暴露する可能性がある</a></td><td>Multithreaded correctness</td></tr> |
312 <tr bgcolor="#eeeeee"><td><a href="#DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE">DL: デ
ッドロックの原因になる可能性があるボクシングされたプリミティブ型の同期化</a></td><td>Multithreaded correctness</td><
/tr> | 323 <tr bgcolor="#eeeeee"><td><a href="#DL_SYNCHRONIZATION_ON_BOOLEAN">DL: Boolean の
同期化</a></td><td>Multithreaded correctness</td></tr> |
313 <tr bgcolor="#ffffff"><td><a href="#DL_SYNCHRONIZATION_ON_SHARED_CONSTANT">DL: 正
準化した文字列の同期化</a></td><td>Multithreaded correctness</td></tr> | 324 <tr bgcolor="#ffffff"><td><a href="#DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE">DL: デ
ッドロックの原因になる可能性があるボクシングされたプリミティブ型の同期化</a></td><td>Multithreaded correctness</td><
/tr> |
314 <tr bgcolor="#eeeeee"><td><a href="#DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITI
VE">DL: ボクシングされたプリミティブ値の同期化</a></td><td>Multithreaded correctness</td></tr> | 325 <tr bgcolor="#eeeeee"><td><a href="#DL_SYNCHRONIZATION_ON_SHARED_CONSTANT">DL: 正
準化した文字列の同期化</a></td><td>Multithreaded correctness</td></tr> |
315 <tr bgcolor="#ffffff"><td><a href="#DM_MONITOR_WAIT_ON_CONDITION">Dm: Condition
で wait メソッドを呼び出している</a></td><td>Multithreaded correctness</td></tr> | 326 <tr bgcolor="#ffffff"><td><a href="#DL_SYNCHRONIZATION_ON_UNSHARED_BOXED_PRIMITI
VE">DL: ボクシングされたプリミティブ値の同期化</a></td><td>Multithreaded correctness</td></tr> |
316 <tr bgcolor="#eeeeee"><td><a href="#DM_USELESS_THREAD">Dm: デフォルトの空の run メソッドを使用し
て作成されたスレッド</a></td><td>Multithreaded correctness</td></tr> | 327 <tr bgcolor="#eeeeee"><td><a href="#DM_MONITOR_WAIT_ON_CONDITION">Dm: Condition
で wait メソッドを呼び出している</a></td><td>Multithreaded correctness</td></tr> |
317 <tr bgcolor="#ffffff"><td><a href="#ESync_EMPTY_SYNC">ESync: 空の synchronized ブロッ
ク</a></td><td>Multithreaded correctness</td></tr> | 328 <tr bgcolor="#ffffff"><td><a href="#DM_USELESS_THREAD">Dm: デフォルトの空の run メソッドを使用し
て作成されたスレッド</a></td><td>Multithreaded correctness</td></tr> |
318 <tr bgcolor="#eeeeee"><td><a href="#IS2_INCONSISTENT_SYNC">IS: 一貫性のない同期化</a></td
><td>Multithreaded correctness</td></tr> | 329 <tr bgcolor="#eeeeee"><td><a href="#ESync_EMPTY_SYNC">ESync: 空の synchronized ブロッ
ク</a></td><td>Multithreaded correctness</td></tr> |
319 <tr bgcolor="#ffffff"><td><a href="#IS_FIELD_NOT_GUARDED">IS: 並行アクセスに対してガードされていな
いフィールド</a></td><td>Multithreaded correctness</td></tr> | 330 <tr bgcolor="#ffffff"><td><a href="#IS2_INCONSISTENT_SYNC">IS: 一貫性のない同期化</a></td
><td>Multithreaded correctness</td></tr> |
320 <tr bgcolor="#eeeeee"><td><a href="#JLM_JSR166_LOCK_MONITORENTER">JLM: Lock で同期化
している</a></td><td>Multithreaded correctness</td></tr> | 331 <tr bgcolor="#eeeeee"><td><a href="#IS_FIELD_NOT_GUARDED">IS: 並行アクセスに対してガードされていな
いフィールド</a></td><td>Multithreaded correctness</td></tr> |
321 <tr bgcolor="#ffffff"><td><a href="#JLM_JSR166_UTILCONCURRENT_MONITORENTER">JLM:
java.util.concurrent のインスタンスで同期化している</a></td><td>Multithreaded correctness</td>
</tr> | 332 <tr bgcolor="#ffffff"><td><a href="#JLM_JSR166_LOCK_MONITORENTER">JLM: Lock で同期化
している</a></td><td>Multithreaded correctness</td></tr> |
322 <tr bgcolor="#eeeeee"><td><a href="#JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT">J
LM: util.concurrent 抽象でモニタスタイルの wait メソッドを使用している</a></td><td>Multithreaded corre
ctness</td></tr> | 333 <tr bgcolor="#eeeeee"><td><a href="#JLM_JSR166_UTILCONCURRENT_MONITORENTER">JLM:
java.util.concurrent のインスタンスで同期化している</a></td><td>Multithreaded correctness</td>
</tr> |
323 <tr bgcolor="#ffffff"><td><a href="#LI_LAZY_INIT_STATIC">LI: static フィールドの間違った遅延
初期化</a></td><td>Multithreaded correctness</td></tr> | 334 <tr bgcolor="#ffffff"><td><a href="#JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT">J
LM: util.concurrent 抽象でモニタスタイルの wait メソッドを使用している</a></td><td>Multithreaded corre
ctness</td></tr> |
324 <tr bgcolor="#eeeeee"><td><a href="#LI_LAZY_INIT_UPDATE_STATIC">LI: 更新される static
フィールドの間違った遅延初期化</a></td><td>Multithreaded correctness</td></tr> | 335 <tr bgcolor="#eeeeee"><td><a href="#LI_LAZY_INIT_STATIC">LI: static フィールドの間違った遅延
初期化</a></td><td>Multithreaded correctness</td></tr> |
325 <tr bgcolor="#ffffff"><td><a href="#ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIEL
D">ML: フィールドを同期化でガードしようとする無駄な試み</a></td><td>Multithreaded correctness</td></tr> | 336 <tr bgcolor="#ffffff"><td><a href="#LI_LAZY_INIT_UPDATE_STATIC">LI: 更新される static
フィールドの間違った遅延初期化</a></td><td>Multithreaded correctness</td></tr> |
326 <tr bgcolor="#eeeeee"><td><a href="#ML_SYNC_ON_UPDATED_FIELD">ML: 更新されるフィールドで同期化
しているメソッド</a></td><td>Multithreaded correctness</td></tr> | 337 <tr bgcolor="#eeeeee"><td><a href="#ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIEL
D">ML: フィールドを同期化でガードしようとする無駄な試み</a></td><td>Multithreaded correctness</td></tr> |
327 <tr bgcolor="#ffffff"><td><a href="#MSF_MUTABLE_SERVLET_FIELD">MSF: 可変サーブレットフィール
ド</a></td><td>Multithreaded correctness</td></tr> | 338 <tr bgcolor="#ffffff"><td><a href="#ML_SYNC_ON_UPDATED_FIELD">ML: 更新されるフィールドで同期化
しているメソッド</a></td><td>Multithreaded correctness</td></tr> |
328 <tr bgcolor="#eeeeee"><td><a href="#MWN_MISMATCHED_NOTIFY">MWN: 不整合な notify メソッド
</a></td><td>Multithreaded correctness</td></tr> | 339 <tr bgcolor="#eeeeee"><td><a href="#MSF_MUTABLE_SERVLET_FIELD">MSF: 可変サーブレットフィール
ド</a></td><td>Multithreaded correctness</td></tr> |
329 <tr bgcolor="#ffffff"><td><a href="#MWN_MISMATCHED_WAIT">MWN: 不整合な wait メソッド</a>
</td><td>Multithreaded correctness</td></tr> | 340 <tr bgcolor="#ffffff"><td><a href="#MWN_MISMATCHED_NOTIFY">MWN: 不整合な notify メソッド
</a></td><td>Multithreaded correctness</td></tr> |
330 <tr bgcolor="#eeeeee"><td><a href="#NN_NAKED_NOTIFY">NN: 裸の notify メソッド</a></td>
<td>Multithreaded correctness</td></tr> | 341 <tr bgcolor="#eeeeee"><td><a href="#MWN_MISMATCHED_WAIT">MWN: 不整合な wait メソッド</a>
</td><td>Multithreaded correctness</td></tr> |
331 <tr bgcolor="#ffffff"><td><a href="#NP_SYNC_AND_NULL_CHECK_FIELD">NP: 同じフィールドでの同
期化と null チェック</a></td><td>Multithreaded correctness</td></tr> | 342 <tr bgcolor="#ffffff"><td><a href="#NN_NAKED_NOTIFY">NN: 裸の notify メソッド</a></td>
<td>Multithreaded correctness</td></tr> |
332 <tr bgcolor="#eeeeee"><td><a href="#NO_NOTIFY_NOT_NOTIFYALL">No: notifyAll メソッドで
はなく notify メソッドを使用している</a></td><td>Multithreaded correctness</td></tr> | 343 <tr bgcolor="#eeeeee"><td><a href="#NP_SYNC_AND_NULL_CHECK_FIELD">NP: 同じフィールドでの同
期化と null チェック</a></td><td>Multithreaded correctness</td></tr> |
333 <tr bgcolor="#ffffff"><td><a href="#RS_READOBJECT_SYNC">RS: readObject メソッドを同期化し
ているクラス</a></td><td>Multithreaded correctness</td></tr> | 344 <tr bgcolor="#ffffff"><td><a href="#NO_NOTIFY_NOT_NOTIFYALL">No: notifyAll メソッドで
はなく notify メソッドを使用している</a></td><td>Multithreaded correctness</td></tr> |
334 <tr bgcolor="#eeeeee"><td><a href="#RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED">RV:
putIfAbsent の戻り値は無視されて putIfAbsent に渡した値は再利用された</a></td><td>Multithreaded correc
tness</td></tr> | 345 <tr bgcolor="#eeeeee"><td><a href="#RS_READOBJECT_SYNC">RS: readObject メソッドを同期化し
ているクラス</a></td><td>Multithreaded correctness</td></tr> |
335 <tr bgcolor="#ffffff"><td><a href="#RU_INVOKE_RUN">Ru: スレッドで run メソッドを呼び出している</a
></td><td>Multithreaded correctness</td></tr> | 346 <tr bgcolor="#ffffff"><td><a href="#RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED">RV:
putIfAbsent の戻り値は無視されて putIfAbsent に渡した値は再利用された</a></td><td>Multithreaded correc
tness</td></tr> |
336 <tr bgcolor="#eeeeee"><td><a href="#SC_START_IN_CTOR">SC: Thread.start() を呼び出してい
るコンストラクタ</a></td><td>Multithreaded correctness</td></tr> | 347 <tr bgcolor="#eeeeee"><td><a href="#RU_INVOKE_RUN">Ru: スレッドで run メソッドを呼び出している</a
></td><td>Multithreaded correctness</td></tr> |
337 <tr bgcolor="#ffffff"><td><a href="#SP_SPIN_ON_FIELD">SP: スピンロックをしているメソッド</a></t
d><td>Multithreaded correctness</td></tr> | 348 <tr bgcolor="#ffffff"><td><a href="#SC_START_IN_CTOR">SC: Thread.start() を呼び出してい
るコンストラクタ</a></td><td>Multithreaded correctness</td></tr> |
338 <tr bgcolor="#eeeeee"><td><a href="#STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE">ST
CAL: static Calendar の呼び出し</a></td><td>Multithreaded correctness</td></tr> | 349 <tr bgcolor="#eeeeee"><td><a href="#SP_SPIN_ON_FIELD">SP: スピンロックをしているメソッド</a></t
d><td>Multithreaded correctness</td></tr> |
339 <tr bgcolor="#ffffff"><td><a href="#STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"
>STCAL: static DateFormat の呼び出し</a></td><td>Multithreaded correctness</td></tr> | 350 <tr bgcolor="#ffffff"><td><a href="#STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE">ST
CAL: static Calendar の呼び出し</a></td><td>Multithreaded correctness</td></tr> |
340 <tr bgcolor="#eeeeee"><td><a href="#STCAL_STATIC_CALENDAR_INSTANCE">STCAL: stati
c Calendar フィールド</a></td><td>Multithreaded correctness</td></tr> | 351 <tr bgcolor="#eeeeee"><td><a href="#STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE"
>STCAL: static DateFormat の呼び出し</a></td><td>Multithreaded correctness</td></tr> |
341 <tr bgcolor="#ffffff"><td><a href="#STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE">ST
CAL: static DateFormat</a></td><td>Multithreaded correctness</td></tr> | 352 <tr bgcolor="#ffffff"><td><a href="#STCAL_STATIC_CALENDAR_INSTANCE">STCAL: stati
c Calendar フィールド</a></td><td>Multithreaded correctness</td></tr> |
342 <tr bgcolor="#eeeeee"><td><a href="#SWL_SLEEP_WITH_LOCK_HELD">SWL: ロックを保持して Thre
ad.sleep() を呼び出しているメソッド</a></td><td>Multithreaded correctness</td></tr> | 353 <tr bgcolor="#eeeeee"><td><a href="#STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE">ST
CAL: static DateFormat</a></td><td>Multithreaded correctness</td></tr> |
343 <tr bgcolor="#ffffff"><td><a href="#TLW_TWO_LOCK_WAIT">TLW: 2つ以上のロックを保持して wait メ
ソッドを呼び出している</a></td><td>Multithreaded correctness</td></tr> | 354 <tr bgcolor="#ffffff"><td><a href="#SWL_SLEEP_WITH_LOCK_HELD">SWL: ロックを保持して Thre
ad.sleep() を呼び出しているメソッド</a></td><td>Multithreaded correctness</td></tr> |
344 <tr bgcolor="#eeeeee"><td><a href="#UG_SYNC_SET_UNSYNC_GET">UG: 同期化していない get メソッ
ド、同期化している set メソッド</a></td><td>Multithreaded correctness</td></tr> | 355 <tr bgcolor="#eeeeee"><td><a href="#TLW_TWO_LOCK_WAIT">TLW: 2つ以上のロックを保持して wait メ
ソッドを呼び出している</a></td><td>Multithreaded correctness</td></tr> |
345 <tr bgcolor="#ffffff"><td><a href="#UL_UNRELEASED_LOCK">UL: すべての経路でロックが解除されないメソッ
ド</a></td><td>Multithreaded correctness</td></tr> | 356 <tr bgcolor="#ffffff"><td><a href="#UG_SYNC_SET_UNSYNC_GET">UG: 同期化していない get メソッ
ド、同期化している set メソッド</a></td><td>Multithreaded correctness</td></tr> |
346 <tr bgcolor="#eeeeee"><td><a href="#UL_UNRELEASED_LOCK_EXCEPTION_PATH">UL: すべての例
外経路でロックが解除されないメソッド</a></td><td>Multithreaded correctness</td></tr> | 357 <tr bgcolor="#eeeeee"><td><a href="#UL_UNRELEASED_LOCK">UL: すべての経路でロックが解除されないメソッ
ド</a></td><td>Multithreaded correctness</td></tr> |
347 <tr bgcolor="#ffffff"><td><a href="#UW_UNCOND_WAIT">UW: wait メソッドの無条件呼び出し</a></t
d><td>Multithreaded correctness</td></tr> | 358 <tr bgcolor="#ffffff"><td><a href="#UL_UNRELEASED_LOCK_EXCEPTION_PATH">UL: すべての例
外経路でロックが解除されないメソッド</a></td><td>Multithreaded correctness</td></tr> |
348 <tr bgcolor="#eeeeee"><td><a href="#VO_VOLATILE_INCREMENT">VO: volatile フィールドへのイ
ンクリメントはアトミックではない</a></td><td>Multithreaded correctness</td></tr> | 359 <tr bgcolor="#eeeeee"><td><a href="#UW_UNCOND_WAIT">UW: wait メソッドの無条件呼び出し</a></t
d><td>Multithreaded correctness</td></tr> |
349 <tr bgcolor="#ffffff"><td><a href="#VO_VOLATILE_REFERENCE_TO_ARRAY">VO: 配列への vol
atile 参照は、配列要素を volatile として扱わない</a></td><td>Multithreaded correctness</td></tr> | 360 <tr bgcolor="#ffffff"><td><a href="#VO_VOLATILE_INCREMENT">VO: volatile フィールドへのイ
ンクリメントはアトミックではない</a></td><td>Multithreaded correctness</td></tr> |
350 <tr bgcolor="#eeeeee"><td><a href="#WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL"
>WL: クラスリテラルではなく getClass で同期化している</a></td><td>Multithreaded correctness</td></t
r> | 361 <tr bgcolor="#eeeeee"><td><a href="#VO_VOLATILE_REFERENCE_TO_ARRAY">VO: 配列への vol
atile 参照は、配列要素を volatile として扱わない</a></td><td>Multithreaded correctness</td></tr> |
351 <tr bgcolor="#ffffff"><td><a href="#WS_WRITEOBJECT_SYNC">WS: writeObject メソッドは同期
化しているがその他のメソッドは同期化していないクラス</a></td><td>Multithreaded correctness</td></tr> | 362 <tr bgcolor="#ffffff"><td><a href="#WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL"
>WL: クラスリテラルではなく getClass で同期化している</a></td><td>Multithreaded correctness</td></t
r> |
352 <tr bgcolor="#eeeeee"><td><a href="#WA_AWAIT_NOT_IN_LOOP">Wa: Condition.await()
がループの中にない</a></td><td>Multithreaded correctness</td></tr> | 363 <tr bgcolor="#eeeeee"><td><a href="#WS_WRITEOBJECT_SYNC">WS: writeObject メソッドは同期
化しているがその他のメソッドは同期化していないクラス</a></td><td>Multithreaded correctness</td></tr> |
353 <tr bgcolor="#ffffff"><td><a href="#WA_NOT_IN_LOOP">Wa: wait メソッドがループの中にない</a></
td><td>Multithreaded correctness</td></tr> | 364 <tr bgcolor="#ffffff"><td><a href="#WA_AWAIT_NOT_IN_LOOP">Wa: Condition.await()
がループの中にない</a></td><td>Multithreaded correctness</td></tr> |
354 <tr bgcolor="#eeeeee"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED">Bx: プリミティブ値がボ
クシングされて、すぐにアンボクシングされる</a></td><td>Performance</td></tr> | 365 <tr bgcolor="#eeeeee"><td><a href="#WA_NOT_IN_LOOP">Wa: wait メソッドがループの中にない</a></
td><td>Multithreaded correctness</td></tr> |
355 <tr bgcolor="#ffffff"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COE
RCION">Bx: プリミティブ値がプリミティブ型の型変換をするためにボクシングされて、アンボクシングされる</a></td><td>Performance<
/td></tr> | 366 <tr bgcolor="#ffffff"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED">Bx: プリミティブ値がボ
クシングされて、すぐにアンボクシングされる</a></td><td>Performance</td></tr> |
| 367 <tr bgcolor="#eeeeee"><td><a href="#BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COE
RCION">Bx: プリミティブ値がプリミティブ型の型変換をするためにボクシングされて、アンボクシングされる</a></td><td>Performance<
/td></tr> |
| 368 <tr bgcolor="#ffffff"><td><a href="#BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR"
>Bx: プリミティブ値が3項演算子のためにアンボクシングされて、型変換される</a></td><td>Performance</td></tr> |
356 <tr bgcolor="#eeeeee"><td><a href="#BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: ボクシングされ
た値がアンボクシングされて、すぐに再ボクシングされる</a></td><td>Performance</td></tr> | 369 <tr bgcolor="#eeeeee"><td><a href="#BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: ボクシングされ
た値がアンボクシングされて、すぐに再ボクシングされる</a></td><td>Performance</td></tr> |
357 <tr bgcolor="#ffffff"><td><a href="#DM_BOXED_PRIMITIVE_FOR_PARSING">Bx: ボクシング/アン
ボクシングはプリミティブを解析する</a></td><td>Performance</td></tr> | 370 <tr bgcolor="#ffffff"><td><a href="#DM_BOXED_PRIMITIVE_FOR_COMPARE">Bx: プリミティブが比
較でボクシングされている</a></td><td>Performance</td></tr> |
358 <tr bgcolor="#eeeeee"><td><a href="#DM_BOXED_PRIMITIVE_TOSTRING">Bx: toString メソ
ッドを呼び出すためにプリミティブ型のラッパクラスのインスタンスを作成している</a></td><td>Performance</td></tr> | 371 <tr bgcolor="#eeeeee"><td><a href="#DM_BOXED_PRIMITIVE_FOR_PARSING">Bx: ボクシング/アン
ボクシングはプリミティブを解析する</a></td><td>Performance</td></tr> |
359 <tr bgcolor="#ffffff"><td><a href="#DM_FP_NUMBER_CTOR">Bx: 効率が悪い浮動小数点 Number コンス
トラクタを呼び出しているメソッド</a></td><td>Performance</td></tr> | 372 <tr bgcolor="#ffffff"><td><a href="#DM_BOXED_PRIMITIVE_TOSTRING">Bx: toString メソ
ッドを呼び出すためにプリミティブ型のラッパクラスのインスタンスを作成している</a></td><td>Performance</td></tr> |
360 <tr bgcolor="#eeeeee"><td><a href="#DM_NUMBER_CTOR">Bx: 効率が悪い Number コンストラクタを呼び出
しているメソッド</a></td><td>Performance</td></tr> | 373 <tr bgcolor="#eeeeee"><td><a href="#DM_FP_NUMBER_CTOR">Bx: 効率が悪い浮動小数点 Number コンス
トラクタを呼び出しているメソッド</a></td><td>Performance</td></tr> |
361 <tr bgcolor="#ffffff"><td><a href="#DMI_BLOCKING_METHODS_ON_URL">Dm: URL の equal
s メソッドと hashCode メソッドはブロックする</a></td><td>Performance</td></tr> | 374 <tr bgcolor="#ffffff"><td><a href="#DM_NUMBER_CTOR">Bx: 効率が悪い Number コンストラクタを呼び出
しているメソッド</a></td><td>Performance</td></tr> |
362 <tr bgcolor="#eeeeee"><td><a href="#DMI_COLLECTION_OF_URLS">Dm: URL の Map や Set
はひどい性能になる可能性がある</a></td><td>Performance</td></tr> | 375 <tr bgcolor="#eeeeee"><td><a href="#DMI_BLOCKING_METHODS_ON_URL">Dm: URL の equal
s メソッドと hashCode メソッドはブロックする</a></td><td>Performance</td></tr> |
363 <tr bgcolor="#ffffff"><td><a href="#DM_BOOLEAN_CTOR">Dm: 効率が悪い Boolean コンストラクタを呼
び出しているメソッド</a></td><td>Performance</td></tr> | 376 <tr bgcolor="#ffffff"><td><a href="#DMI_COLLECTION_OF_URLS">Dm: URL の Map や Set
はひどい性能になる</a></td><td>Performance</td></tr> |
364 <tr bgcolor="#eeeeee"><td><a href="#DM_GC">Dm: 明示的なガベージコレクション</a></td><td>Perfor
mance</td></tr> | 377 <tr bgcolor="#eeeeee"><td><a href="#DM_BOOLEAN_CTOR">Dm: 効率が悪い Boolean コンストラクタを呼
び出しているメソッド</a></td><td>Performance</td></tr> |
365 <tr bgcolor="#ffffff"><td><a href="#DM_NEW_FOR_GETCLASS">Dm: クラスオブジェクトを得るためだけにイン
スタンスを作成しているメソッド</a></td><td>Performance</td></tr> | 378 <tr bgcolor="#ffffff"><td><a href="#DM_GC">Dm: 明示的なガベージコレクション</a></td><td>Perfor
mance</td></tr> |
366 <tr bgcolor="#eeeeee"><td><a href="#DM_NEXTINT_VIA_NEXTDOUBLE">Dm: 整数の乱数を生成するために
は nextDouble メソッド ではなく nextInt メソッドを使用する</a></td><td>Performance</td></tr> | 379 <tr bgcolor="#eeeeee"><td><a href="#DM_NEW_FOR_GETCLASS">Dm: クラスオブジェクトを得るためだけにイン
スタンスを作成しているメソッド</a></td><td>Performance</td></tr> |
367 <tr bgcolor="#ffffff"><td><a href="#DM_STRING_CTOR">Dm: 効率が悪い new String(String)
コンストラクタを呼び出しているメソッド</a></td><td>Performance</td></tr> | 380 <tr bgcolor="#ffffff"><td><a href="#DM_NEXTINT_VIA_NEXTDOUBLE">Dm: 整数の乱数を生成するために
は nextDouble メソッド ではなく nextInt メソッドを使用する</a></td><td>Performance</td></tr> |
368 <tr bgcolor="#eeeeee"><td><a href="#DM_STRING_TOSTRING">Dm: String の toString メソ
ッドを呼び出しているメソッド</a></td><td>Performance</td></tr> | 381 <tr bgcolor="#eeeeee"><td><a href="#DM_STRING_CTOR">Dm: 効率が悪い new String(String)
コンストラクタを呼び出しているメソッド</a></td><td>Performance</td></tr> |
369 <tr bgcolor="#ffffff"><td><a href="#DM_STRING_VOID_CTOR">Dm: 効率が悪い new String()
コンストラクタを呼び出しているメソッド</a></td><td>Performance</td></tr> | 382 <tr bgcolor="#ffffff"><td><a href="#DM_STRING_TOSTRING">Dm: String の toString メソ
ッドを呼び出しているメソッド</a></td><td>Performance</td></tr> |
370 <tr bgcolor="#eeeeee"><td><a href="#HSC_HUGE_SHARED_STRING_CONSTANT">HSC: 複数のクラス
ファイルにわたって複製されている巨大な文字列定数</a></td><td>Performance</td></tr> | 383 <tr bgcolor="#eeeeee"><td><a href="#DM_STRING_VOID_CTOR">Dm: 効率が悪い new String()
コンストラクタを呼び出しているメソッド</a></td><td>Performance</td></tr> |
371 <tr bgcolor="#ffffff"><td><a href="#IIO_INEFFICIENT_INDEX_OF">IIO: String.indexO
f(String) の非効率的な使用</a></td><td>Performance</td></tr> | 384 <tr bgcolor="#ffffff"><td><a href="#HSC_HUGE_SHARED_STRING_CONSTANT">HSC: 複数のクラス
ファイルにわたって複製されている巨大な文字列定数</a></td><td>Performance</td></tr> |
372 <tr bgcolor="#eeeeee"><td><a href="#IIO_INEFFICIENT_LAST_INDEX_OF">IIO: String.l
astIndexOf(String) の非効率的な使用</a></td><td>Performance</td></tr> | |
373 <tr bgcolor="#ffffff"><td><a href="#ITA_INEFFICIENT_TO_ARRAY">ITA: 長さが0の配列の引数で t
oArray メソッドを使用しているメソッド</a></td><td>Performance</td></tr> | |
374 <tr bgcolor="#eeeeee"><td><a href="#SBSC_USE_STRINGBUFFER_CONCATENATION">SBSC: ル
ープの中で + を使用して文字列を連結しているメソッド</a></td><td>Performance</td></tr> | 385 <tr bgcolor="#eeeeee"><td><a href="#SBSC_USE_STRINGBUFFER_CONCATENATION">SBSC: ル
ープの中で + を使用して文字列を連結しているメソッド</a></td><td>Performance</td></tr> |
375 <tr bgcolor="#ffffff"><td><a href="#SIC_INNER_SHOULD_BE_STATIC">SIC: static 内部クラ
スにすべき</a></td><td>Performance</td></tr> | 386 <tr bgcolor="#ffffff"><td><a href="#SIC_INNER_SHOULD_BE_STATIC">SIC: static 内部クラ
スにすべき</a></td><td>Performance</td></tr> |
376 <tr bgcolor="#eeeeee"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_ANON">SIC: 名前付き s
tatic 内部クラスにリファクタリングできるかもしれない</a></td><td>Performance</td></tr> | 387 <tr bgcolor="#eeeeee"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_ANON">SIC: 名前付き s
tatic 内部クラスにリファクタリングできるかもしれない</a></td><td>Performance</td></tr> |
377 <tr bgcolor="#ffffff"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS">SIC:
static 内部クラスにリファクタリングできるかもしれない</a></td><td>Performance</td></tr> | 388 <tr bgcolor="#ffffff"><td><a href="#SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS">SIC:
static 内部クラスにリファクタリングできるかもしれない</a></td><td>Performance</td></tr> |
378 <tr bgcolor="#eeeeee"><td><a href="#SS_SHOULD_BE_STATIC">SS: 読み出されないフィールド</a></t
d><td>Performance</td></tr> | 389 <tr bgcolor="#eeeeee"><td><a href="#SS_SHOULD_BE_STATIC">SS: 読み出されないフィールド</a></t
d><td>Performance</td></tr> |
379 <tr bgcolor="#ffffff"><td><a href="#UM_UNNECESSARY_MATH">UM: 定数値で Math クラスの stat
ic メソッドを呼び出しているメソッド</a></td><td>Performance</td></tr> | 390 <tr bgcolor="#ffffff"><td><a href="#UM_UNNECESSARY_MATH">UM: 定数値で Math クラスの stat
ic メソッドを呼び出しているメソッド</a></td><td>Performance</td></tr> |
380 <tr bgcolor="#eeeeee"><td><a href="#UPM_UNCALLED_PRIVATE_METHOD">UPM: private メソ
ッドは決して呼び出されない</a></td><td>Performance</td></tr> | 391 <tr bgcolor="#eeeeee"><td><a href="#UPM_UNCALLED_PRIVATE_METHOD">UPM: private メソ
ッドは決して呼び出されない</a></td><td>Performance</td></tr> |
381 <tr bgcolor="#ffffff"><td><a href="#URF_UNREAD_FIELD">UrF: 読み出されないフィールド</a></td>
<td>Performance</td></tr> | 392 <tr bgcolor="#ffffff"><td><a href="#URF_UNREAD_FIELD">UrF: 読み出されないフィールド</a></td>
<td>Performance</td></tr> |
382 <tr bgcolor="#eeeeee"><td><a href="#UUF_UNUSED_FIELD">UuF: 未使用のフィールド</a></td><td
>Performance</td></tr> | 393 <tr bgcolor="#eeeeee"><td><a href="#UUF_UNUSED_FIELD">UuF: 未使用のフィールド</a></td><td
>Performance</td></tr> |
383 <tr bgcolor="#ffffff"><td><a href="#WMI_WRONG_MAP_ITERATOR">WMI: entrySet イテレータで
はなく効率が悪い keySet イテレータを使用している</a></td><td>Performance</td></tr> | 394 <tr bgcolor="#ffffff"><td><a href="#WMI_WRONG_MAP_ITERATOR">WMI: entrySet イテレータで
はなく効率が悪い keySet イテレータを使用している</a></td><td>Performance</td></tr> |
384 <tr bgcolor="#eeeeee"><td><a href="#DMI_CONSTANT_DB_PASSWORD">Dm: ハードコードされた定数データ
ベースパスワード</a></td><td>Security</td></tr> | 395 <tr bgcolor="#eeeeee"><td><a href="#DMI_CONSTANT_DB_PASSWORD">Dm: ハードコードされた定数データ
ベースパスワード</a></td><td>Security</td></tr> |
385 <tr bgcolor="#ffffff"><td><a href="#DMI_EMPTY_DB_PASSWORD">Dm: 空のデータベースパスワード</a>
</td><td>Security</td></tr> | 396 <tr bgcolor="#ffffff"><td><a href="#DMI_EMPTY_DB_PASSWORD">Dm: 空のデータベースパスワード</a>
</td><td>Security</td></tr> |
386 <tr bgcolor="#eeeeee"><td><a href="#HRS_REQUEST_PARAMETER_TO_COOKIE">HRS: 信頼できない
入力から形成された HTTP cookie</a></td><td>Security</td></tr> | 397 <tr bgcolor="#eeeeee"><td><a href="#HRS_REQUEST_PARAMETER_TO_COOKIE">HRS: 信頼できない
入力から形成された HTTP cookie</a></td><td>Security</td></tr> |
387 <tr bgcolor="#ffffff"><td><a href="#HRS_REQUEST_PARAMETER_TO_HTTP_HEADER">HRS: H
TTP レスポンススプリッティング脆弱性</a></td><td>Security</td></tr> | 398 <tr bgcolor="#ffffff"><td><a href="#HRS_REQUEST_PARAMETER_TO_HTTP_HEADER">HRS: H
TTP レスポンススプリッティング脆弱性</a></td><td>Security</td></tr> |
388 <tr bgcolor="#eeeeee"><td><a href="#PT_ABSOLUTE_PATH_TRAVERSAL">PT: サーブレットの絶対パスト
ラバーサル</a></td><td>Security</td></tr> | 399 <tr bgcolor="#eeeeee"><td><a href="#PT_ABSOLUTE_PATH_TRAVERSAL">PT: サーブレットの絶対パスト
ラバーサル</a></td><td>Security</td></tr> |
389 <tr bgcolor="#ffffff"><td><a href="#PT_RELATIVE_PATH_TRAVERSAL">PT: サーブレットの相対パスト
ラバーサル</a></td><td>Security</td></tr> | 400 <tr bgcolor="#ffffff"><td><a href="#PT_RELATIVE_PATH_TRAVERSAL">PT: サーブレットの相対パスト
ラバーサル</a></td><td>Security</td></tr> |
390 <tr bgcolor="#eeeeee"><td><a href="#SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE">SQ
L: SQL の Statement の execute メソッドに定数でない文字列を渡している</a></td><td>Security</td></tr> | 401 <tr bgcolor="#eeeeee"><td><a href="#SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE">SQ
L: SQL の Statement の execute または addBatch メソッドに定数でない文字列を渡している</a></td><td>Secur
ity</td></tr> |
391 <tr bgcolor="#ffffff"><td><a href="#SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCON
STANT_STRING">SQL: PreparedStatement が定数でない文字列から生成されている</a></td><td>Security</td
></tr> | 402 <tr bgcolor="#ffffff"><td><a href="#SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCON
STANT_STRING">SQL: PreparedStatement が定数でない文字列から生成されている</a></td><td>Security</td
></tr> |
392 <tr bgcolor="#eeeeee"><td><a href="#XSS_REQUEST_PARAMETER_TO_JSP_WRITER">XSS: 反射
型クロスサイトスクリプティング脆弱性がある JSP</a></td><td>Security</td></tr> | 403 <tr bgcolor="#eeeeee"><td><a href="#XSS_REQUEST_PARAMETER_TO_JSP_WRITER">XSS: 反射
型クロスサイトスクリプティング脆弱性がある JSP</a></td><td>Security</td></tr> |
393 <tr bgcolor="#ffffff"><td><a href="#XSS_REQUEST_PARAMETER_TO_SEND_ERROR">XSS: 反射
型クロスサイトスクリプティング脆弱性がエラーページにあるサーブレット</a></td><td>Security</td></tr> | 404 <tr bgcolor="#ffffff"><td><a href="#XSS_REQUEST_PARAMETER_TO_SEND_ERROR">XSS: 反射
型クロスサイトスクリプティング脆弱性がエラーページにあるサーブレット</a></td><td>Security</td></tr> |
394 <tr bgcolor="#eeeeee"><td><a href="#XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER">XSS
: 反射型クロスサイトスクリプティング脆弱性があるサーブレット</a></td><td>Security</td></tr> | 405 <tr bgcolor="#eeeeee"><td><a href="#XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER">XSS
: 反射型クロスサイトスクリプティング脆弱性があるサーブレット</a></td><td>Security</td></tr> |
395 <tr bgcolor="#ffffff"><td><a href="#BC_BAD_CAST_TO_ABSTRACT_COLLECTION">BC: 抽象コレ
クションへの疑わしいキャスト</a></td><td>Dodgy code</td></tr> | 406 <tr bgcolor="#ffffff"><td><a href="#BC_BAD_CAST_TO_ABSTRACT_COLLECTION">BC: 抽象コレ
クションへの疑わしいキャスト</a></td><td>Dodgy code</td></tr> |
396 <tr bgcolor="#eeeeee"><td><a href="#BC_BAD_CAST_TO_CONCRETE_COLLECTION">BC: 具象コレ
クションへの疑わしいキャスト</a></td><td>Dodgy code</td></tr> | 407 <tr bgcolor="#eeeeee"><td><a href="#BC_BAD_CAST_TO_CONCRETE_COLLECTION">BC: 具象コレ
クションへの疑わしいキャスト</a></td><td>Dodgy code</td></tr> |
397 <tr bgcolor="#ffffff"><td><a href="#BC_UNCONFIRMED_CAST">BC: 未チェック/未確認のキャスト</a><
/td><td>Dodgy code</td></tr> | 408 <tr bgcolor="#ffffff"><td><a href="#BC_UNCONFIRMED_CAST">BC: 未チェック/未確認のキャスト</a><
/td><td>Dodgy code</td></tr> |
398 <tr bgcolor="#eeeeee"><td><a href="#BC_UNCONFIRMED_CAST_OF_RETURN_VALUE">BC: メソッ
ドからの戻り値の未チェック/未確認のキャスト</a></td><td>Dodgy code</td></tr> | 409 <tr bgcolor="#eeeeee"><td><a href="#BC_UNCONFIRMED_CAST_OF_RETURN_VALUE">BC: メソッ
ドからの戻り値の未チェック/未確認のキャスト</a></td><td>Dodgy code</td></tr> |
399 <tr bgcolor="#ffffff"><td><a href="#BC_VACUOUS_INSTANCEOF">BC: 常に true を返す insta
nceof</a></td><td>Dodgy code</td></tr> | 410 <tr bgcolor="#ffffff"><td><a href="#BC_VACUOUS_INSTANCEOF">BC: 常に true を返す insta
nceof</a></td><td>Dodgy code</td></tr> |
400 <tr bgcolor="#eeeeee"><td><a href="#ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT">BSH
IFT: 符号なし右シフトを short/byte にキャストしている</a></td><td>Dodgy code</td></tr> | 411 <tr bgcolor="#eeeeee"><td><a href="#ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT">BSH
IFT: 符号なし右シフトを short/byte にキャストしている</a></td><td>Dodgy code</td></tr> |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES">RC
N: 2つの null 値の冗長な比較</a></td><td>Dodgy code</td></tr> | 452 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES">RC
N: 2つの null 値の冗長な比較</a></td><td>Dodgy code</td></tr> |
442 <tr bgcolor="#eeeeee"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE">RC
N: null でないことがわかっている値の冗長な null チェック</a></td><td>Dodgy code</td></tr> | 453 <tr bgcolor="#eeeeee"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE">RC
N: null でないことがわかっている値の冗長な null チェック</a></td><td>Dodgy code</td></tr> |
443 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE">RCN:
null とわかっている値の冗長な null チェック</a></td><td>Dodgy code</td></tr> | 454 <tr bgcolor="#ffffff"><td><a href="#RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE">RCN:
null とわかっている値の冗長な null チェック</a></td><td>Dodgy code</td></tr> |
444 <tr bgcolor="#eeeeee"><td><a href="#REC_CATCH_EXCEPTION">REC: 例外がスローされないのに例外をキャッ
チしている</a></td><td>Dodgy code</td></tr> | 455 <tr bgcolor="#eeeeee"><td><a href="#REC_CATCH_EXCEPTION">REC: 例外がスローされないのに例外をキャッ
チしている</a></td><td>Dodgy code</td></tr> |
445 <tr bgcolor="#ffffff"><td><a href="#RI_REDUNDANT_INTERFACES">RI: スーパークラスと同じインタフェ
ースを実装しているクラス</a></td><td>Dodgy code</td></tr> | 456 <tr bgcolor="#ffffff"><td><a href="#RI_REDUNDANT_INTERFACES">RI: スーパークラスと同じインタフェ
ースを実装しているクラス</a></td><td>Dodgy code</td></tr> |
446 <tr bgcolor="#eeeeee"><td><a href="#RV_CHECK_FOR_POSITIVE_INDEXOF">RV: String.in
dexOf の結果が正かどうか確かめている</a></td><td>Dodgy code</td></tr> | 457 <tr bgcolor="#eeeeee"><td><a href="#RV_CHECK_FOR_POSITIVE_INDEXOF">RV: String.in
dexOf の結果が正かどうか確かめている</a></td><td>Dodgy code</td></tr> |
447 <tr bgcolor="#ffffff"><td><a href="#RV_DONT_JUST_NULL_CHECK_READLINE">RV: readLi
ne メソッドの結果を null でないのか確かめた後で捨てている</a></td><td>Dodgy code</td></tr> | 458 <tr bgcolor="#ffffff"><td><a href="#RV_DONT_JUST_NULL_CHECK_READLINE">RV: readLi
ne メソッドの結果を null でないのか確かめた後で捨てている</a></td><td>Dodgy code</td></tr> |
448 <tr bgcolor="#eeeeee"><td><a href="#RV_REM_OF_HASHCODE">RV: ハッシュコードの剰余は負かもしれない</
a></td><td>Dodgy code</td></tr> | 459 <tr bgcolor="#eeeeee"><td><a href="#RV_REM_OF_HASHCODE">RV: ハッシュコードの剰余は負かもしれない</
a></td><td>Dodgy code</td></tr> |
449 <tr bgcolor="#ffffff"><td><a href="#RV_REM_OF_RANDOM_INT">RV: 符号付き32ビット整数の乱数の剰余<
/a></td><td>Dodgy code</td></tr> | 460 <tr bgcolor="#ffffff"><td><a href="#RV_REM_OF_RANDOM_INT">RV: 符号付き32ビット整数の乱数の剰余<
/a></td><td>Dodgy code</td></tr> |
450 <tr bgcolor="#eeeeee"><td><a href="#RV_RETURN_VALUE_IGNORED_INFERRED">RV: メソッドは戻
り値を無視しています、これは間違いではないですか?</a></td><td>Dodgy code</td></tr> | 461 <tr bgcolor="#eeeeee"><td><a href="#RV_RETURN_VALUE_IGNORED_INFERRED">RV: メソッドは戻
り値を無視しています、これは間違いではないですか?</a></td><td>Dodgy code</td></tr> |
451 <tr bgcolor="#ffffff"><td><a href="#SA_FIELD_DOUBLE_ASSIGNMENT">SA: フィールドの二重代入</
a></td><td>Dodgy code</td></tr> | 462 <tr bgcolor="#ffffff"><td><a href="#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV:
副作用がないメソッドの戻り値は無視される</a></td><td>Dodgy code</td></tr> |
452 <tr bgcolor="#eeeeee"><td><a href="#SA_LOCAL_DOUBLE_ASSIGNMENT">SA: ローカル変数の二重代入<
/a></td><td>Dodgy code</td></tr> | 463 <tr bgcolor="#eeeeee"><td><a href="#SA_FIELD_DOUBLE_ASSIGNMENT">SA: フィールドの二重代入</
a></td><td>Dodgy code</td></tr> |
453 <tr bgcolor="#ffffff"><td><a href="#SA_LOCAL_SELF_ASSIGNMENT">SA: ローカル変数の自己代入</a
></td><td>Dodgy code</td></tr> | 464 <tr bgcolor="#ffffff"><td><a href="#SA_LOCAL_DOUBLE_ASSIGNMENT">SA: ローカル変数の二重代入<
/a></td><td>Dodgy code</td></tr> |
454 <tr bgcolor="#eeeeee"><td><a href="#SF_SWITCH_FALLTHROUGH">SF: 1つの case が次の case
へと通り抜ける switch 文を発見した</a></td><td>Dodgy code</td></tr> | 465 <tr bgcolor="#eeeeee"><td><a href="#SA_LOCAL_SELF_ASSIGNMENT">SA: ローカル変数の自己代入</a
></td><td>Dodgy code</td></tr> |
455 <tr bgcolor="#ffffff"><td><a href="#SF_SWITCH_NO_DEFAULT">SF: default がない switch
文を発見した</a></td><td>Dodgy code</td></tr> | 466 <tr bgcolor="#ffffff"><td><a href="#SF_SWITCH_FALLTHROUGH">SF: 1つの case が次の case
へと通り抜ける switch 文を発見した</a></td><td>Dodgy code</td></tr> |
456 <tr bgcolor="#eeeeee"><td><a href="#ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST:
インスタンスメソッドから static フィールドへの書き込み</a></td><td>Dodgy code</td></tr> | 467 <tr bgcolor="#eeeeee"><td><a href="#SF_SWITCH_NO_DEFAULT">SF: default がない switch
文を発見した</a></td><td>Dodgy code</td></tr> |
457 <tr bgcolor="#ffffff"><td><a href="#SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: サ
ブクラスで継承できない private な readResolve メソッド</a></td><td>Dodgy code</td></tr> | 468 <tr bgcolor="#ffffff"><td><a href="#ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST:
インスタンスメソッドから static フィールドへの書き込み</a></td><td>Dodgy code</td></tr> |
458 <tr bgcolor="#eeeeee"><td><a href="#SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS"
>Se: Serializable でないクラスの transient フィールド</a></td><td>Dodgy code</td></tr> | 469 <tr bgcolor="#eeeeee"><td><a href="#SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: サ
ブクラスで継承できない private な readResolve メソッド</a></td><td>Dodgy code</td></tr> |
459 <tr bgcolor="#ffffff"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALW
AYS_SINK">TQ: 値は型修飾子を必要としているが、不明としてマークされている</a></td><td>Dodgy code</td></tr> | 470 <tr bgcolor="#ffffff"><td><a href="#SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS"
>Se: Serializable でないクラスの transient フィールド</a></td><td>Dodgy code</td></tr> |
460 <tr bgcolor="#eeeeee"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEV
ER_SINK">TQ: 値は型修飾子を必要としないが、不明としてマークされている</a></td><td>Dodgy code</td></tr> | 471 <tr bgcolor="#eeeeee"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALW
AYS_SINK">TQ: 値は型修飾子を必要としているが、不明としてマークされている</a></td><td>Dodgy code</td></tr> |
| 472 <tr bgcolor="#ffffff"><td><a href="#TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEV
ER_SINK">TQ: 値は型修飾子を必要としないが、不明としてマークされている</a></td><td>Dodgy code</td></tr> |
| 473 <tr bgcolor="#eeeeee"><td><a href="#UC_USELESS_CONDITION">UC: 条件は効果がない</a></td><
td>Dodgy code</td></tr> |
| 474 <tr bgcolor="#ffffff"><td><a href="#UC_USELESS_CONDITION_TYPE">UC: 条件は変数型のために効果が
ない</a></td><td>Dodgy code</td></tr> |
| 475 <tr bgcolor="#eeeeee"><td><a href="#UC_USELESS_OBJECT">UC: 役に立たないオブジェクトを作成した</a>
</td><td>Dodgy code</td></tr> |
| 476 <tr bgcolor="#ffffff"><td><a href="#UC_USELESS_OBJECT_STACK">UC: 役に立たないオブジェクトをスタ
ックで作成した</a></td><td>Dodgy code</td></tr> |
| 477 <tr bgcolor="#eeeeee"><td><a href="#UC_USELESS_VOID_METHOD">UC: 役に立たない空ではない void
メソッド</a></td><td>Dodgy code</td></tr> |
461 <tr bgcolor="#ffffff"><td><a href="#UCF_USELESS_CONTROL_FLOW">UCF: 役に立たない制御フロー</
a></td><td>Dodgy code</td></tr> | 478 <tr bgcolor="#ffffff"><td><a href="#UCF_USELESS_CONTROL_FLOW">UCF: 役に立たない制御フロー</
a></td><td>Dodgy code</td></tr> |
462 <tr bgcolor="#eeeeee"><td><a href="#UCF_USELESS_CONTROL_FLOW_NEXT_LINE">UCF: 次の行
へ続くだけの役に立たない制御フロー</a></td><td>Dodgy code</td></tr> | 479 <tr bgcolor="#eeeeee"><td><a href="#UCF_USELESS_CONTROL_FLOW_NEXT_LINE">UCF: 次の行
へ続くだけの役に立たない制御フロー</a></td><td>Dodgy code</td></tr> |
463 <tr bgcolor="#ffffff"><td><a href="#URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD">UrF: 読
み出されない public または protected フィールド</a></td><td>Dodgy code</td></tr> | 480 <tr bgcolor="#ffffff"><td><a href="#URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD">UrF: 読
み出されない public または protected フィールド</a></td><td>Dodgy code</td></tr> |
464 <tr bgcolor="#eeeeee"><td><a href="#UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD">UuF: 未
使用の public または protected フィールド</a></td><td>Dodgy code</td></tr> | 481 <tr bgcolor="#eeeeee"><td><a href="#UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD">UuF: 未
使用の public または protected フィールド</a></td><td>Dodgy code</td></tr> |
465 <tr bgcolor="#ffffff"><td><a href="#UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR">Uw
F: コンストラクタで初期化されていないフィールドを null チェックなしで null 値を利用している</a></td><td>Dodgy code</td
></tr> | 482 <tr bgcolor="#ffffff"><td><a href="#UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR">Uw
F: コンストラクタで初期化されていないフィールドを null チェックなしで null 値を利用している</a></td><td>Dodgy code</td
></tr> |
466 <tr bgcolor="#eeeeee"><td><a href="#UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">UwF
: 書き込まてれいない public または protected フィールド</a></td><td>Dodgy code</td></tr> | 483 <tr bgcolor="#eeeeee"><td><a href="#UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">UwF
: 書き込まてれいない public または protected フィールド</a></td><td>Dodgy code</td></tr> |
467 <tr bgcolor="#ffffff"><td><a href="#XFB_XML_FACTORY_BYPASS">XFB: XMLインタフェースの特定の実
装のインスタンスを作成しているメソッド</a></td><td>Dodgy code</td></tr> | 484 <tr bgcolor="#ffffff"><td><a href="#XFB_XML_FACTORY_BYPASS">XFB: XMLインタフェースの特定の実
装のインスタンスを作成しているメソッド</a></td><td>Dodgy code</td></tr> |
468 </table> | 485 </table> |
469 <h2>Descriptions</h2> | 486 <h2>Descriptions</h2> |
470 <h3><a name="BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS">BC: equals メソッドは引数の型を
仮定するべきではない (BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS)</a></h3> | 487 <h3><a name="BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS">BC: equals メソッドは引数の型を
仮定するべきではない (BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS)</a></h3> |
471 | 488 |
472 | 489 |
473 <p> | 490 <p> |
474 <code>equals(Object o)</code> メソッドは、<code>o</code> の型についてどんな仮定もするべきではありません。 | 491 <code>equals(Object o)</code> メソッドは、<code>o</code> の型についてどんな仮定もするべきではありません。 |
475 <code>o</code> が <code>this</code> と同じ型でないなら単に false を返すべきです。 | 492 <code>o</code> が <code>this</code> と同じ型でないなら単に false を返すべきです。 |
476 </p> | 493 </p> |
477 | 494 |
478 | 495 |
479 <h3><a name="BIT_SIGNED_CHECK">BIT: ビット演算の符号をチェックする (BIT_SIGNED_CHECK)</a></h3> | 496 <h3><a name="BIT_SIGNED_CHECK">BIT: ビット演算の符号をチェックする (BIT_SIGNED_CHECK)</a></h3> |
480 | 497 |
481 | 498 |
482 <p> | 499 <p> |
483 このメソッドは、<code>((event.detail & SWT.SELECTED) > 0)</code> のような式を比較しています。 | 500 このメソッドは、<code>((event.detail & SWT.SELECTED) > 0)</code> のような式を比較しています。 |
484 ビット演算をより大きい演算子で比較することは、予想外の結果 (もちろん、<code>SWT.SELECTED</code> の値による) の原因になる可能性があ
ります。 | 501 ビット演算をより大きい演算子で比較することは、予想外の結果 (もちろん、<code>SWT.SELECTED</code> の値による) の原因になる可能性があ
ります。 |
485 <code>SWT.SELECTED</code> が負数であるなら、これはバグの候補です。 | 502 <code>SWT.SELECTED</code> が負数であるなら、これはバグの候補です。 |
486 <code>SWT.SELECTED</code> が負ではないとしても、'> 0' の代わりに '!= 0' を使うことは良いプラクティスと思われます。 | 503 <code>SWT.SELECTED</code> が負ではないとしても、'> 0' の代わりに '!= 0' を使用することは良いプラクティスと思われま
す。 |
487 </p> | 504 </p> |
488 <p> | 505 <p> |
489 Boris Bokowski | 506 Boris Bokowski |
490 </p> | 507 </p> |
491 | 508 |
492 | 509 |
493 <h3><a name="CN_IDIOM">CN: Cloneable を実装したクラスが clone メソッドを定義していないか、使用していない (CN_I
DIOM)</a></h3> | 510 <h3><a name="CN_IDIOM">CN: Cloneable を実装したクラスが clone メソッドを定義していないか、使用していない (CN_I
DIOM)</a></h3> |
494 | 511 |
495 | 512 |
496 <p> | 513 <p> |
(...skipping 20 matching lines...) Expand all Loading... |
517 <p> | 534 <p> |
518 このクラスは、<code>Cloneable</code> を実装していないのに <code>clone</code> メソッドを定義しています。 | 535 このクラスは、<code>Cloneable</code> を実装していないのに <code>clone</code> メソッドを定義しています。 |
519 これが OK (たとえば、サブクラスのクローンの実装を自分自身で制御したい場合です) という状況もありますが意図したことなのか確認してください。 | 536 これが OK (たとえば、サブクラスのクローンの実装を自分自身で制御したい場合です) という状況もありますが意図したことなのか確認してください。 |
520 </p> | 537 </p> |
521 | 538 |
522 | 539 |
523 <h3><a name="CNT_ROUGH_CONSTANT_VALUE">CNT: 既知の定数の雑な値を見つける (CNT_ROUGH_CONSTANT_V
ALUE)</a></h3> | 540 <h3><a name="CNT_ROUGH_CONSTANT_VALUE">CNT: 既知の定数の雑な値を見つける (CNT_ROUGH_CONSTANT_V
ALUE)</a></h3> |
524 | 541 |
525 | 542 |
526 <p> | 543 <p> |
527 コードの明確さともっと良い正確さのために定義済みライブラリ定数を使うことを推奨します。 | 544 コードの明確さともっと良い正確さのために定義済みライブラリ定数を使用することを推奨します。 |
528 </p> | 545 </p> |
529 | 546 |
530 | 547 |
531 <h3><a name="CO_ABSTRACT_SELF">Co: 抽象クラスは共変な compareTo メソッドを定義している (CO_ABSTRACT_
SELF)</a></h3> | 548 <h3><a name="CO_ABSTRACT_SELF">Co: 抽象クラスは共変な compareTo メソッドを定義している (CO_ABSTRACT_
SELF)</a></h3> |
532 | 549 |
533 | 550 |
534 <p> | 551 <p> |
535 このクラスは、共変な <code>compareTo</code> メソッドを定義しています。 | 552 このクラスは、共変な <code>compareTo</code> メソッドを定義しています。 |
536 <code>Comparable</code> インタフェースの <code>compareTo</code> メソッドを正しく実装するためには <code>c
ompareTo</code> メソッドのパラメータの型は、<code>java.lang.Object</code> でなければなりません。 | 553 <code>Comparable</code> インタフェースの <code>compareTo</code> メソッドを正しく実装するためには <code>c
ompareTo</code> メソッドのパラメータの型は、<code>java.lang.Object</code> でなければなりません。 |
537 </p> | 554 </p> |
538 | 555 |
539 | 556 |
| 557 <h3><a name="CO_COMPARETO_INCORRECT_FLOATING">Co: compareTo()/compare() は間違って fl
oat または double 値を処理する (CO_COMPARETO_INCORRECT_FLOATING)</a></h3> |
| 558 |
| 559 |
| 560 <p> |
| 561 このメソッドはこのようなパターンを使用して double または float 値を比較しています : val1 > val2 ? 1 : val1 <
; val2 ? -1 : 0。 |
| 562 このパターンは 正しくないソート結果や壊れたコレクションの原因になるかもしれない -0.0 や NaN 値のために間違って働きます (もし比較された値がキーと
して使われるなら)。 |
| 563 すべての特殊なケースを正確に処理するために Double.compare または Float.compare メソッドの使用を検討してください。 |
| 564 </p> |
| 565 |
| 566 |
| 567 <h3><a name="CO_COMPARETO_RESULTS_MIN_VALUE">Co: compareTo()/compare() は Integer
.MIN_VALUE を返す (CO_COMPARETO_RESULTS_MIN_VALUE)</a></h3> |
| 568 |
| 569 |
| 570 <p> |
| 571 いくつかの状況下では、この <code>compareTo</code> または <code>compare</code> メソッドは Integer.MIN_
VALUE を返します。ひどいバッドプラクティスです。 |
| 572 <code>compareTo</code> メソッドの戻り値で重要なことは結果の符号だけです。 |
| 573 しかし、結果の符号を無効にすることを期待して、<code>compareTo</code> メソッドの戻り値を無効にすることがあります。 |
| 574 返された値が Integer.MIN_VALUE の場合を除いてです。 Integer.MIN_VALUE よりも-1を返してください。 |
| 575 </p> |
| 576 |
| 577 |
540 <h3><a name="CO_SELF_NO_OBJECT">Co: 共変な compareTo メソッドの定義 (CO_SELF_NO_OBJECT)</a
></h3> | 578 <h3><a name="CO_SELF_NO_OBJECT">Co: 共変な compareTo メソッドの定義 (CO_SELF_NO_OBJECT)</a
></h3> |
541 | 579 |
542 | 580 |
543 <p> | 581 <p> |
544 このクラスは、共変な <code>compareTo</code> メソッドを定義しています。 | 582 このクラスは、共変な <code>compareTo</code> メソッドを定義しています。 |
545 <code>Comparable</code> インタフェースの <code>compareTo</code> メソッドを正しく実装するためには <code>c
ompareTo</code> メソッドのパラメータの型は、<code>java.lang.Object</code> でなければなりません。 | 583 <code>Comparable</code> インタフェースの <code>compareTo</code> メソッドを正しく実装するためには <code>c
ompareTo</code> メソッドのパラメータの型は、<code>java.lang.Object</code> でなければなりません。 |
546 </p> | 584 </p> |
547 | 585 |
548 | 586 |
549 <h3><a name="DE_MIGHT_DROP">DE: 例外を捨てているかもしれないメソッド (DE_MIGHT_DROP)</a></h3> | 587 <h3><a name="DE_MIGHT_DROP">DE: 例外を捨てているかもしれないメソッド (DE_MIGHT_DROP)</a></h3> |
550 | 588 |
551 | 589 |
552 <p> | 590 <p> |
553 このメソッドは、例外を捨てているかもしれません。 | 591 このメソッドは、例外を捨てているかもしれません。 |
554 一般にキャッチした例外は何らかの方法で処理、または報告するべきです、あるいはメソッドからスローするべきです。 | 592 一般的にキャッチした例外は何らかの方法で処理、または報告するべきです、またはメソッドからスローするべきです。 |
555 </p> | 593 </p> |
556 | 594 |
557 | 595 |
558 <h3><a name="DE_MIGHT_IGNORE">DE: 例外を無視しているかもしれないメソッド (DE_MIGHT_IGNORE)</a></h3> | 596 <h3><a name="DE_MIGHT_IGNORE">DE: 例外を無視しているかもしれないメソッド (DE_MIGHT_IGNORE)</a></h3> |
559 | 597 |
560 | 598 |
561 <p> | 599 <p> |
562 このメソッドは例外を無視しているかもしれません。 | 600 このメソッドは例外を無視しているかもしれません。 |
563 一般に例外は何らかの方法で処理、または報告するべきです、あるいはメソッドからスローするべきです。 | 601 一般的に例外は何らかの方法で処理、または報告するべきです、またはメソッドからスローするべきです。 |
564 </p> | 602 </p> |
565 | 603 |
566 | 604 |
567 <h3><a name="DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS">DMI: エントリセットの要素を加えることは、Entr
y オブジェクトの再利用のために失敗するかもしれない (DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS)</a></h3> | 605 <h3><a name="DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS">DMI: エントリセットの要素を加えることは、Entr
y オブジェクトの再利用のために失敗するかもしれない (DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS)</a></h3> |
568 | 606 |
569 | 607 |
570 <p> | 608 <p> |
571 entrySet メソッドは、一つの Entry オブジェクトを再利用し、反復中に返される基底 Map のビューを返すことが許可されています。 | 609 entrySet メソッドは、一つの Entry オブジェクトを再利用し、反復中に返される基底 Map のビューを返すことが許可されています。 |
572 Java 1.6 の時点で、IdentityHashMap と EnumMap の両方がそうしました。 | 610 Java 1.6 の時点で、IdentityHashMap と EnumMap の両方がそうしました。 |
573 そのような Map を通して繰り返すとき、エントリ値は次の繰り返しへ進むまでが有効です。 | 611 そのような Map を通して繰り返すとき、エントリ値は次の繰り返しへ進むまでが有効です。 |
574 たとえば、addAll メソッドにそのような entrySet を渡そうと試みるのは、ひどく間違っているでしょう。 | 612 たとえば、addAll メソッドにそのような entrySet を渡そうと試みるのは、ひどく間違っているでしょう。 |
575 </p> | 613 </p> |
576 | 614 |
577 | 615 |
578 <h3><a name="DMI_RANDOM_USED_ONLY_ONCE">DMI: Random オブジェクトが作成され1度しか使われない (DMI_RA
NDOM_USED_ONLY_ONCE)</a></h3> | 616 <h3><a name="DMI_RANDOM_USED_ONLY_ONCE">DMI: Random オブジェクトが作成され1度しか使われない (DMI_RA
NDOM_USED_ONLY_ONCE)</a></h3> |
579 | 617 |
580 | 618 |
581 <p> | 619 <p> |
582 このコードは、<code>java.util.Random</code> オブジェクトを作成して1つの乱数を生成するために使用して捨てています。 | 620 このコードは、<code>java.util.Random</code> オブジェクトを作成して1つの乱数を生成するために使用して捨てています。 |
583 これはあまり良くない品質の乱数を作り出し、効率が悪いです。 | 621 これはあまり良くない品質の乱数を作り出し、効率が悪いです。 |
584 できれば、<code>Random</code> オブジェクトを1つだけ作成して保存されるようにコードを書き直してください。 | 622 できれば、<code>Random</code> オブジェクトを1つだけ作成して保存されるようにコードを書き直してください。 |
585 そして、新しい乱数が必要なたびに既存の <code>Random</code> オブジェクトでメソッドを呼び出してください。 | 623 そして、毎回新しい乱数は既存の <code>Random</code> オブジェクトを呼び出して取得することが必要です。 |
586 </p> | 624 </p> |
587 <p> | 625 <p> |
588 生成された乱数が推測可能でないことが重要なら、乱数ごとに新しい <code>Random</code> オブジェクトを作成してはいけません (値はあまりに簡単に
推測可能です)。 | 626 生成された乱数が推測可能でないことが重要なら、乱数ごとに新しい <code>Random</code> オブジェクトを作成してはいけません (値はあまりに簡単に
推測可能です)。 |
589 その代わりに <code>java.security.SecureRandom</code> の使用を強く検討するべきです (そして必要とされる乱数ごとに新しい
<code>SecureRandom</code> のオブジェクトを作成することを回避します)。 | 627 その代わりに <code>java.security.SecureRandom</code> の使用を強く検討するべきです (そして必要とされる乱数ごとに新しい
<code>SecureRandom</code> のオブジェクトを作成することを回避します)。 |
590 </p> | 628 </p> |
591 | 629 |
592 | 630 |
593 <h3><a name="DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION">DMI: コレクションを消去するために remove
All メソッドを使用しない (DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION)</a></h3> | 631 <h3><a name="DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION">DMI: コレクションを消去するために remove
All メソッドを使用しない (DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION)</a></h3> |
594 | 632 |
595 | 633 |
596 <p> | 634 <p> |
597 コレクション <code>c</code> からすべての要素を除去したいなら、<code>c.removeAll(c)</code> ではなく <code>c.
clear</code> を使用してください。 | 635 コレクション <code>c</code> からすべての要素を除去したいなら、<code>c.removeAll(c)</code> ではなく <code>c.
clear</code> を使用してください。 |
598 コレクションを消去するために <code>c.removeAll(c)</code> を呼び出すことは、それほど明確ではなく、タイプミスからの誤りに影響されやす
く、効率的ではなく、いくつかのコレクションでは、<code>ConcurrentModificationException</code> をスローするかもしれま
せん。 | 636 コレクションを消去するために <code>c.removeAll(c)</code> を呼び出すことは、それほど明確ではなく、タイプミスからの誤りに影響されやす
く、効率的ではなく、いくつかのコレクションでは、<code>ConcurrentModificationException</code> をスローするかもしれま
せん。 |
599 </p> | 637 </p> |
600 | 638 |
601 | 639 |
602 <h3><a name="DM_EXIT">Dm: System.exit(...) を呼び出しているメソッド (DM_EXIT)</a></h3> | 640 <h3><a name="DM_EXIT">Dm: System.exit(...) を呼び出しているメソッド (DM_EXIT)</a></h3> |
603 | 641 |
604 | 642 |
605 <p> | 643 <p> |
606 <code>System.exit(...)</code> を呼び出すことは、Java 仮想マシン全体をシャットダウンさせてしまいます。 | 644 <code>System.exit(...)</code> を呼び出すことは、Java 仮想マシン全体をシャットダウンさせてしまいます。 |
607 それが適切な場合にだけ使用するべきです。 | 645 それが適切な場合にだけ使用するべきです。 |
608 <code>System.exit(...)</code> の呼び出しはコードが他のコードによって呼び出されることを困難か不可能にします。 | 646 <code>System.exit(...)</code> の呼び出しは、他のコードによる呼び出しを困難か不可能にします。 |
609 その代わりに RuntimeException をスローすることを検討してください。 | 647 その代わりに RuntimeException をスローすることを検討してください。 |
610 </p> | 648 </p> |
611 | 649 |
612 | 650 |
613 <h3><a name="DM_RUN_FINALIZERS_ON_EXIT">Dm: 危険なメソッド runFinalizersOnExit を呼び出している
メソッド (DM_RUN_FINALIZERS_ON_EXIT)</a></h3> | 651 <h3><a name="DM_RUN_FINALIZERS_ON_EXIT">Dm: 危険なメソッド runFinalizersOnExit を呼び出している
メソッド (DM_RUN_FINALIZERS_ON_EXIT)</a></h3> |
614 | 652 |
615 | 653 |
616 <p> | 654 <p> |
617 どんな理由があるにせよ決して <code>System.runFinalizersOnExit</code> と <code>Runtime.runFinali
zersOnExit</code> を呼び出さないでください。 | 655 どんな理由があるにせよ決して <code>System.runFinalizersOnExit</code> と <code>Runtime.runFinali
zersOnExit</code> を呼び出さないでください。 |
618 Java ライブラリで最も危険なメソッドの1つです。 -- Joshua Bloch | 656 Java ライブラリで最も危険なメソッドの1つです。 -- Joshua Bloch |
619 </p> | 657 </p> |
620 | 658 |
621 | 659 |
622 <h3><a name="ES_COMPARING_PARAMETER_STRING_WITH_EQ">ES: String パラメータを == や != を使
用して比較している (ES_COMPARING_PARAMETER_STRING_WITH_EQ)</a></h3> | 660 <h3><a name="ES_COMPARING_PARAMETER_STRING_WITH_EQ">ES: String パラメータを == や != を使
用して比較している (ES_COMPARING_PARAMETER_STRING_WITH_EQ)</a></h3> |
623 | 661 |
624 | 662 |
625 <p> | 663 <p> |
626 このコードは、参照等価性のために == や != を使用して <code>java.lang.String</code> パラメータを比較しています。 | 664 このコードは、参照等価性のために == や != を使用して <code>java.lang.String</code> パラメータを比較しています。 |
627 文字列定数または正準化された文字列だけをメソッドに渡すことを呼び出し元に要求することは必要以上に脆弱で測定可能な性能の向上をもたらしません。 | 665 文字列定数または正準化された文字列だけをメソッドに渡すことを呼び出し元に要求することは必要以上に脆弱で測定可能な性能の向上をもたらしません。 |
628 その代わりに <code>equals(Object)</code> メソッドを使うことを検討してください。 | 666 その代わりに <code>equals(Object)</code> メソッドを使用することを検討してください。 |
629 </p> | 667 </p> |
630 | 668 |
631 | 669 |
632 <h3><a name="ES_COMPARING_STRINGS_WITH_EQ">ES: String オブジェクトを == や != を使用して比較してい
る (ES_COMPARING_STRINGS_WITH_EQ)</a></h3> | 670 <h3><a name="ES_COMPARING_STRINGS_WITH_EQ">ES: String オブジェクトを == や != を使用して比較してい
る (ES_COMPARING_STRINGS_WITH_EQ)</a></h3> |
633 | 671 |
634 | 672 |
635 <p> | 673 <p> |
636 このコードは、参照等価性のために == や != を使用して <code>java.lang.String</code> オブジェクトを比較しています。 | 674 このコードは、参照等価性のために == や != を使用して <code>java.lang.String</code> オブジェクトを比較しています。 |
637 両方の文字列がソースファイルの定数か、<code>String.intern()</code> を使用して正準化されていないかぎり、同じ文字列は2つの異なる S
tring オブジェクトによって表されるかもしれません。 | 675 両方の文字列がソースファイルの定数か、<code>String.intern()</code> を使用して正準化されていないかぎり、同じ文字列は2つの異なる S
tring オブジェクトによって表されるかもしれません。 |
638 その代わりに <code>equals(Object)</code> メソッドを使うことを検討してください。 | 676 その代わりに <code>equals(Object)</code> メソッドを使用することを検討してください。 |
639 </p> | 677 </p> |
640 | 678 |
641 | 679 |
642 <h3><a name="EQ_ABSTRACT_SELF">Eq: 抽象クラスは共変な equals メソッドを宣言している (EQ_ABSTRACT_SEL
F)</a></h3> | 680 <h3><a name="EQ_ABSTRACT_SELF">Eq: 抽象クラスは共変な equals メソッドを宣言している (EQ_ABSTRACT_SEL
F)</a></h3> |
643 | 681 |
644 | 682 |
645 <p> | 683 <p> |
646 このクラスは、共変な <code>equals</code> メソッドを定義しています。 | 684 このクラスは、共変な <code>equals</code> メソッドを定義しています。 |
647 <code>java.lang.Object</code> の <code>equals</code> メソッドを正しくオーバーライドするためには <code>
equals</code> メソッドのパラメータの型は、<code>java.lang.Object</code> でなければなりません。 | 685 <code>java.lang.Object</code> の <code>equals</code> メソッドを正しくオーバーライドするためには <code>
equals</code> メソッドのパラメータの型は、<code>java.lang.Object</code> でなければなりません。 |
648 </p> | 686 </p> |
649 | 687 |
650 | 688 |
651 <h3><a name="EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS">Eq: equals メソッドは互換性の
ないオペランドをチェックしている (EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)</a></h3> | 689 <h3><a name="EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS">Eq: equals メソッドは互換性の
ないオペランドをチェックしている (EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS)</a></h3> |
652 | 690 |
653 | 691 |
654 <p> | 692 <p> |
655 この <code>equals</code> メソッドは、引数が互換性のない型 (すなわちスーパタイプでもなく、<code>equals</code> メソッド
を定義しているクラスのスーパータイプでもサブタイプでもないクラス) なのか確かめています。 | 693 この <code>equals</code> メソッドは、引数が互換性のない型 (すなわちスーパタイプでもなく、<code>equals</code> メソッド
を定義しているクラスのスーパータイプでもサブタイプでもないクラス) なのか確かめています。 |
656 たとえば、<code>Foo</code> クラスの <code>equals</code> メソッドはそのように見えるかもしれません。 | 694 たとえば、<code>Foo</code> クラスの <code>equals</code> メソッドはそのように見えるかもしれません。 |
657 </p> | 695 </p> |
658 <blockquote><pre> | 696 <blockquote><pre> |
659 public boolean equals(Object o) { | 697 public boolean equals(Object o) { |
660 if (o instanceof Foo) | 698 if (o instanceof Foo) |
661 return name.equals(((Foo)o).name); | 699 return name.equals(((Foo)o).name); |
662 else if (o instanceof String) | 700 else if (o instanceof String) |
663 return name.equals(o); | 701 return name.equals(o); |
664 else return false; | 702 else return false; |
665 } | 703 } |
666 </pre></blockquote> | 704 </pre></blockquote> |
667 <p> | 705 <p> |
668 これは対称的で推移的である <code>equals</code> メソッドを実現するのはとても難しいので、間違ったプラクティスと見なされています。 | 706 これは対称的で推移的である <code>equals</code> メソッドを実現するのはとても難しいので、バッドプラクティスと見なされています。 |
669 プロパティがなければまったく予想していない振る舞いが起こりえます。 | 707 プロパティがなければまったく予想していない振る舞いが起こりえます。 |
670 </p> | 708 </p> |
671 | 709 |
672 | 710 |
673 <h3><a name="EQ_COMPARETO_USE_OBJECT_EQUALS">Eq: compareTo(...) メソッドを定義して Object
.equals() を使用しているクラス (EQ_COMPARETO_USE_OBJECT_EQUALS)</a></h3> | 711 <h3><a name="EQ_COMPARETO_USE_OBJECT_EQUALS">Eq: compareTo(...) メソッドを定義して Object
.equals() を使用しているクラス (EQ_COMPARETO_USE_OBJECT_EQUALS)</a></h3> |
674 | 712 |
675 | 713 |
676 <p> | 714 <p> |
677 このクラスは、<code>compareTo(...)</code> メソッドを定義していますが、<code>equals</code> メソッドは <code
>java.lang.Object</code> から継承しています。 | 715 このクラスは、<code>compareTo(...)</code> メソッドを定義していますが、<code>equals</code> メソッドは <code
>java.lang.Object</code> から継承しています。 |
678 一般に、<code>equals</code> メソッドが true を返す場合に限り、<code>compareTo</code> メソッドは0を返すべきです
。 | 716 一般的に<code>equals</code> メソッドが true を返す場合に限り、<code>compareTo</code> メソッドは0を返すべきです
。 |
679 これが違反されるなら奇妙で予測できない失敗が PriorityQueue などのクラスで発生します。 | 717 これが違反されるなら奇妙で予測できない失敗が PriorityQueue などのクラスで発生します。 |
680 J2SE 5.0では、<code>PriorityQueue.remove()</code> は <code>compareTo</code> メソッドを使用し
ますが、Java SE 6では、<code>equals</code> メソッドを使用します。 | 718 J2SE 5.0では、<code>PriorityQueue.remove()</code> は <code>compareTo</code> メソッドを使用し
ますが、Java SE 6では、<code>equals</code> メソッドを使用します。 |
681 </p> | 719 </p> |
682 <p> | 720 <p> |
683 Comparable インタフェースの compareTo メソッドの JavaDoc を以下に引用します。 | 721 Comparable インタフェースの compareTo メソッドの JavaDoc を以下に引用します。 |
684 </p> | 722 </p> |
685 <blockquote><p> | 723 <blockquote><p> |
686 必須というわけではありませんが、<code>(x.compareTo(y)==0) == (x.equals(y))</code> であることが強く推奨されます
。 | 724 必須というわけではありませんが、<code>(x.compareTo(y)==0) == (x.equals(y))</code> であることが強く推奨されます
。 |
687 一般に、<code>Comparable</code> インタフェースを実装しているクラスで、この条件に違反するクラスは明確にこの事実を示す必要があります。 | 725 一般的に<code>Comparable</code> インタフェースを実装しているクラスで、この条件に違反するクラスは明確にこの事実を示す必要があります。 |
688 「注:このクラスは <code>equals</code> と一貫性のない自然順序付けを持ちます」などと明示することをお勧めします。 | 726 「注:このクラスは <code>equals</code> と一貫性のない自然順序付けを持ちます」などと明示することをお勧めします。 |
689 </p></blockquote> | 727 </blockquote></p> |
690 | 728 |
691 | 729 |
692 <h3><a name="EQ_GETCLASS_AND_CLASS_CONSTANT">Eq: equals メソッドはサブタイプのために失敗する (EQ_G
ETCLASS_AND_CLASS_CONSTANT)</a></h3> | 730 <h3><a name="EQ_GETCLASS_AND_CLASS_CONSTANT">Eq: equals メソッドはサブタイプのために失敗する (EQ_G
ETCLASS_AND_CLASS_CONSTANT)</a></h3> |
693 | 731 |
694 | 732 |
695 <p> | 733 <p> |
696 このクラスは、サブクラスによる継承によって壊れる <code>equlas</code> メソッドがあります。 | 734 このクラスは、サブクラスによる継承によって壊れる <code>equlas</code> メソッドがあります。 |
697 <code>equals</code> メソッドは、クラスリテラルを引数のクラスと比較しています (たとえば、<code>Foo</code> クラスで <co
de>Foo.class == o.getClass()</code> のような判定を行っています)。 | 735 <code>equals</code> メソッドは、クラスリテラルを引数のクラスと比較しています (たとえば、<code>Foo</code> クラスで <co
de>Foo.class == o.getClass()</code> のような判定を行っています)。 |
698 <code>this.getClass() == o.getClass()</code> の方がより良いです。 | 736 <code>this.getClass() == o.getClass()</code> の方がより良いです。 |
699 </p> | 737 </p> |
(...skipping 20 matching lines...) Expand all Loading... |
720 | 758 |
721 | 759 |
722 <p> | 760 <p> |
723 このメソッドには明示的にオブジェクトで <code>finalize</code> メソッドの呼び出しがあります。 | 761 このメソッドには明示的にオブジェクトで <code>finalize</code> メソッドの呼び出しがあります。 |
724 ファイナライザは Java 仮想マシンによって1度だけ実行されることになっているので、これは間違った考えです。 | 762 ファイナライザは Java 仮想マシンによって1度だけ実行されることになっているので、これは間違った考えです。 |
725 </p> | 763 </p> |
726 <p> | 764 <p> |
727 参照によってつながった複数のオブジェクトがファイナライズ可能になると、Java 仮想マシンはすべてのオブジェクトの <code>finalize</code>
メソッドを呼び出します。 | 765 参照によってつながった複数のオブジェクトがファイナライズ可能になると、Java 仮想マシンはすべてのオブジェクトの <code>finalize</code>
メソッドを呼び出します。 |
728 おそらく異なるスレッドで同時にです。 | 766 おそらく異なるスレッドで同時にです。 |
729 したがって、クラス <i>X</i> の <code>finalize</code> メソッドの中から <i>X</i> によって参照されているオブジェクトの
<code>finalize</code> メソッドを呼び出すのは、とりわけ間違った考えです。 | 767 したがって、クラス <i>X</i> の <code>finalize</code> メソッドの中から <i>X</i> によって参照されているオブジェクトの
<code>finalize</code> メソッドを呼び出すのは、とりわけ間違った考えです。 |
730 なぜなら、オブジェクトがすでに別のスレッドによってファイナライズされているかもしれないからです。 | 768 なぜなら、オブジェクトが既に別のスレッドによってファイナライズされているかもしれないからです。 |
731 </p> | 769 </p> |
732 | 770 |
733 | 771 |
734 <h3><a name="FI_FINALIZER_NULLS_FIELDS">FI: ファイナライザはフィールドを null にする (FI_FINALIZE
R_NULLS_FIELDS)</a></h3> | 772 <h3><a name="FI_FINALIZER_NULLS_FIELDS">FI: ファイナライザはフィールドを null にする (FI_FINALIZE
R_NULLS_FIELDS)</a></h3> |
735 | 773 |
736 | 774 |
737 <p> | 775 <p> |
738 このファイナライザは、フィールドを null にしています。 | 776 このファイナライザは、フィールドを null にしています。 |
739 これは通常誤りでガベージコレクタを助けません。オブジェクトはいずれにしろガベージされます。 | 777 これは通常誤りでガベージコレクタを助けません。オブジェクトはいずれにしろガベージされます。 |
740 </p> | 778 </p> |
741 | 779 |
742 | 780 |
743 <h3><a name="FI_FINALIZER_ONLY_NULLS_FIELDS">FI: ファイナライザはフィールドを null にするだけ (FI_F
INALIZER_ONLY_NULLS_FIELDS)</a></h3> | 781 <h3><a name="FI_FINALIZER_ONLY_NULLS_FIELDS">FI: ファイナライザはフィールドを null にするだけ (FI_F
INALIZER_ONLY_NULLS_FIELDS)</a></h3> |
744 | 782 |
745 | 783 |
746 <p> | 784 <p> |
747 このファイナライザは、フィールドを null にすること以外に何もしません。 | 785 このファイナライザは、フィールドを null にすること以外に何もしません。 |
748 これはまったく無意味であり、オブジェクトがガベージされ、ファイナライズされ、再びガベージされることを要求しています。 | 786 これはまったく無意味であり、オブジェクトがガベージされ、ファイナライズされ、再びガベージされることを要求しています。 |
749 <code>finalize</code> メソッドを削除するべきです。 | 787 <code>finalize</code> メソッドを除去するべきです。 |
750 </p> | 788 </p> |
751 | 789 |
752 | 790 |
753 <h3><a name="FI_MISSING_SUPER_CALL">FI: ファイナライザはスーパークラスのファイナライザを呼び出していない (FI_MIS
SING_SUPER_CALL)</a></h3> | 791 <h3><a name="FI_MISSING_SUPER_CALL">FI: ファイナライザはスーパークラスのファイナライザを呼び出していない (FI_MIS
SING_SUPER_CALL)</a></h3> |
754 | 792 |
755 | 793 |
756 <p> | 794 <p> |
757 この <code>finalize</code> メソッドは、スーパークラスの <code>finalize</code> メソッドを呼び出していません。 | 795 この <code>finalize</code> メソッドは、スーパークラスの <code>finalize</code> メソッドを呼び出していません。 |
758 したがって、スーパークラスのために定義されたどんなファイナライザアクションも実行されません。 | 796 したがって、スーパークラスのために定義されたどんなファイナライザアクションも実行されません。 |
759 <code>super.finalize()</code> の呼び出しを追加してください。 | 797 <code>super.finalize()</code> の呼び出しを追加してください。 |
(...skipping 17 matching lines...) Expand all Loading... |
777 この <code>finalize</code> メソッドは、スーパークラスの <code>finalize</code> メソッドを呼び出しているだけです。 | 815 この <code>finalize</code> メソッドは、スーパークラスの <code>finalize</code> メソッドを呼び出しているだけです。 |
778 冗長なので削除してください。 | 816 冗長なので削除してください。 |
779 </p> | 817 </p> |
780 | 818 |
781 | 819 |
782 <h3><a name="VA_FORMAT_STRING_USES_NEWLINE">FS: 書式文字列は \n よりも %n を使用するべき (VA_FOR
MAT_STRING_USES_NEWLINE)</a></h3> | 820 <h3><a name="VA_FORMAT_STRING_USES_NEWLINE">FS: 書式文字列は \n よりも %n を使用するべき (VA_FOR
MAT_STRING_USES_NEWLINE)</a></h3> |
783 | 821 |
784 | 822 |
785 <p> | 823 <p> |
786 この書式文字列には改行文字 (\n) が含まれています。 | 824 この書式文字列には改行文字 (\n) が含まれています。 |
787 一般に書式文字列には %n を使用することがより望ましいです。%n は、プラットホーム特有の行セパレータを作り出します。 | 825 一般的に書式文字列には %n を使用することがより望ましいです。%n は、プラットホーム特有の行セパレータを作り出します。 |
788 </p> | 826 </p> |
789 | 827 |
790 | 828 |
791 <h3><a name="GC_UNCHECKED_TYPE_IN_GENERIC_CALL">GC: 検査されない型への総称呼び出し (GC_UNCHECKE
D_TYPE_IN_GENERIC_CALL)</a></h3> | 829 <h3><a name="GC_UNCHECKED_TYPE_IN_GENERIC_CALL">GC: 検査されない型への総称呼び出し (GC_UNCHECKE
D_TYPE_IN_GENERIC_CALL)</a></h3> |
792 | 830 |
793 | 831 |
794 <p> | 832 <p> |
795 総称型パラメータからの特定の型が予想される Object 型をコンパイルするとき、総称型コレクションメソッドへの呼び出しは引数を渡します。 | 833 総称型パラメータからの特定の型が予想される Object 型をコンパイルするとき、総称型コレクションメソッドへの呼び出しは引数を渡します。 |
796 したがって、標準の Java 型システムも静的解析もパラメータとして渡されているオブジェクトが適切な型かどうかに関する有効な情報を提供できません。 | 834 したがって、標準の Java 型システムも静的解析もパラメータとして渡されているオブジェクトが適切な型かどうかに関する有用な情報を提供できません。 |
797 </p> | 835 </p> |
798 | 836 |
799 | 837 |
800 <h3><a name="HE_EQUALS_NO_HASHCODE">HE: equals メソッドは定義していますが hashCode メソッドは定義してい
ないクラス (HE_EQUALS_NO_HASHCODE)</a></h3> | 838 <h3><a name="HE_EQUALS_NO_HASHCODE">HE: equals メソッドは定義していますが hashCode メソッドは定義してい
ないクラス (HE_EQUALS_NO_HASHCODE)</a></h3> |
801 | 839 |
802 | 840 |
803 <p> | 841 <p> |
804 このクラスは、<code>equals(Object)</code> メソッドをオーバーライドしていますが、<code>hashCode</code> メソッド
はオーバーライドしていません。 | 842 このクラスは、<code>equals(Object)</code> メソッドをオーバーライドしていますが、<code>hashCode</code> メソッド
はオーバーライドしていません。 |
805 したがって、「等価なオブジェクトは等価なハッシュコードを保持する必要がある」という <code>hashCode</code> メソッドの汎用規約に違反するかも
しれません。 | 843 したがって、「等価なオブジェクトは等価なハッシュコードを保持する必要がある」という <code>hashCode</code> メソッドの汎用規約に違反するかも
しれません。 |
806 </p> | 844 </p> |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
880 | 918 |
881 static CircularClassInitialization foo = InnerClassSingleton.singleton; | 919 static CircularClassInitialization foo = InnerClassSingleton.singleton; |
882 } | 920 } |
883 </pre></blockquote> | 921 </pre></blockquote> |
884 | 922 |
885 | 923 |
886 <h3><a name="IMSE_DONT_CATCH_IMSE">IMSE: 疑わしい IllegalMonitorStateException のキャッチ
(IMSE_DONT_CATCH_IMSE)</a></h3> | 924 <h3><a name="IMSE_DONT_CATCH_IMSE">IMSE: 疑わしい IllegalMonitorStateException のキャッチ
(IMSE_DONT_CATCH_IMSE)</a></h3> |
887 | 925 |
888 | 926 |
889 <p> | 927 <p> |
890 <code>IllegalMonitorStateException</code> は、一般に設計上の欠陥 (ロックを保持していないオブジェクトで <code>
wait</code> メソッドまたは <code>notify</code> メソッドを呼び出す) の場合にだけスローされます。 | 928 <code>IllegalMonitorStateException</code> は、一般的に設計上の欠陥 (ロックを保持していないオブジェクトで <code
>wait</code> メソッドまたは <code>notify</code> メソッドを呼び出す) の場合にだけスローされます。 |
891 </p> | 929 </p> |
892 | 930 |
893 | 931 |
894 <h3><a name="ISC_INSTANTIATE_STATIC_CLASS">ISC: static メソッドだけを提供するクラスの不必要なインスタンス
化 (ISC_INSTANTIATE_STATIC_CLASS)</a></h3> | 932 <h3><a name="ISC_INSTANTIATE_STATIC_CLASS">ISC: static メソッドだけを提供するクラスの不必要なインスタンス
化 (ISC_INSTANTIATE_STATIC_CLASS)</a></h3> |
895 | 933 |
896 | 934 |
897 <p> | 935 <p> |
898 このクラスは、static メソッドだけを提供するクラスのオブジェクトを作成しています。 | 936 このクラスは、static メソッドだけを提供するクラスのオブジェクトを作成しています。 |
899 このオブジェクトは作成する必要はありません。修飾子として直接クラス名を使用する static メソッドにアクセスしてください。 | 937 このオブジェクトは作成する必要はありません。修飾子として直接クラス名を使用する static メソッドにアクセスしてください。 |
900 </p> | 938 </p> |
(...skipping 20 matching lines...) Expand all Loading... |
921 | 959 |
922 <h3><a name="JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS">JCIP: 不変クラスのフィールドは final
にすべき (JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS)</a></h3> | 960 <h3><a name="JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS">JCIP: 不変クラスのフィールドは final
にすべき (JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS)</a></h3> |
923 | 961 |
924 | 962 |
925 <p> | 963 <p> |
926 クラスは、net.jcip.annotations.Immutable または javax.annotation.concurrent.Immutable でア
ノテートされています。 | 964 クラスは、net.jcip.annotations.Immutable または javax.annotation.concurrent.Immutable でア
ノテートされています。 |
927 アノテーションのルールは、すべてのフィールドが final であることを義務づけます。 | 965 アノテーションのルールは、すべてのフィールドが final であることを義務づけます。 |
928 </p> | 966 </p> |
929 | 967 |
930 | 968 |
| 969 <h3><a name="ME_ENUM_FIELD_SETTER">ME: public 列挙型メソッドが無条件にフィールドを設定するPublic enum
method unconditionally sets its field (ME_ENUM_FIELD_SETTER)</a></h3> |
| 970 |
| 971 |
| 972 <p> |
| 973 無条件に列挙型フィールドを設定している public 列挙型で public メソッドを宣言しています。 |
| 974 したがって、フィールドは悪意のあるコードや偶然別のパッケージによって変更できます。 |
| 975 可変列挙型フィールドが遅延初期化で使用されるかもしれないとしても外界へ暴露するバッドプラクティスです。 |
| 976 このメソッドを除去するかパッケージプライベートとして宣言することを考えてください。 |
| 977 </p> |
| 978 |
| 979 |
| 980 <h3><a name="ME_MUTABLE_ENUM_FIELD">ME: 列挙型フィールドは public で可変である (ME_MUTABLE_ENUM
_FIELD)</a></h3> |
| 981 |
| 982 |
| 983 <p> |
| 984 可変 public フィールドが public 列挙型の中に定義されています。 |
| 985 したがって、フィールドは悪意のあるコードや偶然別のパッケージによって変更できます。 |
| 986 可変列挙型フィールドが遅延初期化で使用されるかもしれないとしても外界へ暴露するバッドプラクティスです。 |
| 987 このメソッドを final およびパッケージプライベートとして宣言することを考えてください。 |
| 988 </p> |
| 989 |
| 990 |
931 <h3><a name="NP_BOOLEAN_RETURN_NULL">NP: 戻り型が Boolean のメソッドが明示的に null を返している (NP
_BOOLEAN_RETURN_NULL)</a></h3> | 991 <h3><a name="NP_BOOLEAN_RETURN_NULL">NP: 戻り型が Boolean のメソッドが明示的に null を返している (NP
_BOOLEAN_RETURN_NULL)</a></h3> |
932 | 992 |
933 | 993 |
934 <p> | 994 <p> |
935 Boolean.TRUE、Boolean.FALSE、null を返すメソッドはいつ事故が起きてもおかしくないです。 | 995 Boolean.TRUE、Boolean.FALSE、null を返すメソッドはいつ事故が起きてもおかしくないです。 |
936 まるで論理型の値を返すかのように、このメソッドは呼び出される可能性があります。 | 996 このメソッドは、まるで論理型の値を返すかのように呼び出されます。 |
937 コンパイラは Boolean 値のオートアンボクシングを挿入します。 | 997 コンパイラは Boolean 値のオートアンボクシングを挿入します。 |
938 null 値が返されるなら NullPointerException が発生することになります。 | 998 null 値が返されるなら NullPointerException が発生することになります。 |
939 </p> | 999 </p> |
940 | 1000 |
941 | 1001 |
942 <h3><a name="NP_CLONE_COULD_RETURN_NULL">NP: null を返すかもしれない clone メソッド (NP_CLONE
_COULD_RETURN_NULL)</a></h3> | 1002 <h3><a name="NP_CLONE_COULD_RETURN_NULL">NP: null を返すかもしれない clone メソッド (NP_CLONE
_COULD_RETURN_NULL)</a></h3> |
943 | 1003 |
944 | 1004 |
945 <p> | 1005 <p> |
946 この <code>clone</code> メソッドは、いくつかの条件で null を返すと思われます。 | 1006 この <code>clone</code> メソッドは、いくつかの条件で null を返すと思われます。 |
(...skipping 29 matching lines...) Expand all Loading... |
976 クラス名は単純でわかりやすいようにしてください。 | 1036 クラス名は単純でわかりやすいようにしてください。 |
977 頭文字や略語 (URLやHTMLなどのように略語がロング形式よりもはるかに広く使われている場合を除く) の使用は避けてください。 | 1037 頭文字や略語 (URLやHTMLなどのように略語がロング形式よりもはるかに広く使われている場合を除く) の使用は避けてください。 |
978 </p> | 1038 </p> |
979 | 1039 |
980 | 1040 |
981 <h3><a name="NM_CLASS_NOT_EXCEPTION">Nm: 例外クラスのように命名されているが、クラスは Exception から派生され
ていない (NM_CLASS_NOT_EXCEPTION)</a></h3> | 1041 <h3><a name="NM_CLASS_NOT_EXCEPTION">Nm: 例外クラスのように命名されているが、クラスは Exception から派生され
ていない (NM_CLASS_NOT_EXCEPTION)</a></h3> |
982 | 1042 |
983 | 1043 |
984 <p> | 1044 <p> |
985 このクラスは、例外クラスから派生されていないのにクラス名が「Exception」で終わっています。 | 1045 このクラスは、例外クラスから派生されていないのにクラス名が「Exception」で終わっています。 |
986 これは、このクラスのユーザに紛らわしいです。 | 1046 これはこのクラスのユーザに紛らわしいです。 |
987 </p> | 1047 </p> |
988 | 1048 |
989 | 1049 |
990 <h3><a name="NM_CONFUSING">Nm: 紛らわしい名前のメソッド (NM_CONFUSING)</a></h3> | 1050 <h3><a name="NM_CONFUSING">Nm: 紛らわしい名前のメソッド (NM_CONFUSING)</a></h3> |
991 | 1051 |
992 | 1052 |
993 <p> | 1053 <p> |
994 参照されたメソッドは、大文字の使い方だけによって異なる名前があります。 | 1054 参照されたメソッドは、大文字の使い方だけによって異なる名前があります。 |
995 </p> | 1055 </p> |
996 | 1056 |
(...skipping 29 matching lines...) Expand all Loading... |
1026 | 1086 |
1027 <p> | 1087 <p> |
1028 メソッド名は、最初の文字は小文字にし、それに続く各単語の最初の文字を大文字にした動詞にすべきです。 | 1088 メソッド名は、最初の文字は小文字にし、それに続く各単語の最初の文字を大文字にした動詞にすべきです。 |
1029 </p> | 1089 </p> |
1030 | 1090 |
1031 | 1091 |
1032 <h3><a name="NM_SAME_SIMPLE_NAME_AS_INTERFACE">Nm: クラス名は実装されたインタフェースの単純名を遮るべきではな
い (NM_SAME_SIMPLE_NAME_AS_INTERFACE)</a></h3> | 1092 <h3><a name="NM_SAME_SIMPLE_NAME_AS_INTERFACE">Nm: クラス名は実装されたインタフェースの単純名を遮るべきではな
い (NM_SAME_SIMPLE_NAME_AS_INTERFACE)</a></h3> |
1033 | 1093 |
1034 | 1094 |
1035 <p> | 1095 <p> |
1036 このクラスまたはインタフェースは、、インタフェースが異なるパッケージであるということを除いて実装された/拡張されたインタフェースと同一の単純名です (たとえば、
<code>alpha.Foo</code> が <code>beta.Foo</code> を継承しているような状況です)。 | 1096 このクラスまたはインタフェースは、インタフェースが異なるパッケージであるということを除いて実装された/拡張されたインタフェースと同一の単純名です (たとえば、<
code>alpha.Foo</code> が <code>beta.Foo</code> を継承しているような状況です)。 |
1037 これは非常に紛らわしく、参照関係を解決するために import 文を見なければならなかったり、スーパークラスに存在するメソッドを誤ってオーバーライドしてしまった
りする状況を作り出します。 | 1097 これは非常に紛らわしく、参照関係を解決するために import 文を見なければならなかったり、スーパークラスのメソッドをオーバーライドしないで誤ってメソッドを定
義する状況を作り出します。 |
1038 </p> | 1098 </p> |
1039 | 1099 |
1040 | 1100 |
1041 <h3><a name="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS">Nm: クラス名はスーパークラスの単純名を遮るべきではない (N
M_SAME_SIMPLE_NAME_AS_SUPERCLASS)</a></h3> | 1101 <h3><a name="NM_SAME_SIMPLE_NAME_AS_SUPERCLASS">Nm: クラス名はスーパークラスの単純名を遮るべきではない (N
M_SAME_SIMPLE_NAME_AS_SUPERCLASS)</a></h3> |
1042 | 1102 |
1043 | 1103 |
1044 <p> | 1104 <p> |
1045 このクラスは、スーパークラスが異なるパッケージであるということを除いて、スーパークラスと同一の単純名をです (たとえば、<code>alpha.Foo</cod
e> が <code>beta.Foo</code> を拡張します)。 | 1105 このクラスは、スーパークラスが異なるパッケージであるということを除いて、スーパークラスと同一の単純名をです (たとえば、<code>alpha.Foo</cod
e> が <code>beta.Foo</code> を拡張します)。 |
1046 これは非常に紛らわしく、参照関係を解決するために import 文を見なければならなかったり、スーパークラスに存在するメソッドを誤ってオーバーライドしてしまった
りする状況を作り出します。 | 1106 これは非常に紛らわしく、参照関係を解決するために import 文を見なければならなかったり、スーパークラスのメソッドをオーバーライドしないで誤ってメソッドを定
義する状況を作り出します。 |
1047 </p> | 1107 </p> |
1048 | 1108 |
1049 | 1109 |
1050 <h3><a name="NM_VERY_CONFUSING_INTENTIONAL">Nm: 非常に紛らわしい名前のメソッド (多分意図的) (NM_VERY
_CONFUSING_INTENTIONAL)</a></h3> | 1110 <h3><a name="NM_VERY_CONFUSING_INTENTIONAL">Nm: 非常に紛らわしい名前のメソッド (多分意図的) (NM_VERY
_CONFUSING_INTENTIONAL)</a></h3> |
1051 | 1111 |
1052 | 1112 |
1053 <p> | 1113 <p> |
1054 参照されたメソッドは、大文字の使い方だけによって異なる名前があります。 | 1114 参照されたメソッドは、大文字の使い方だけによって異なる名前があります。 |
1055 大文字の使い方が同一ならメソッドの1つが他のメソッドをオーバーライドするので、非常に紛らわしいです。 | 1115 大文字の使い方が同一ならメソッドの1つが他のメソッドをオーバーライドするので、非常に紛らわしいです。 |
1056 他のメソッドの存在から、これらのメソッドの両方の存在が意図的で、確実に混乱させていると思われます。 | 1116 他のメソッドの存在から、これらのメソッドの両方の存在が意図的で、確実に混乱させていると思われます。 |
1057 APIの凍結によって両方とも持たざるを得ない場合を除き、それらのうちの1つを削除しようと努力するべきです。 | 1117 APIの凍結によって両方とも持たざるを得ない場合を除き、それらのうちの1つを除去しようと努力するべきです。 |
1058 </p> | 1118 </p> |
1059 | 1119 |
1060 | 1120 |
1061 <h3><a name="NM_WRONG_PACKAGE_INTENTIONAL">Nm: パラメータの間違ったパッケージのためにスーパークラスのメソッドをオ
ーバーライドしていないメソッド (NM_WRONG_PACKAGE_INTENTIONAL)</a></h3> | 1121 <h3><a name="NM_WRONG_PACKAGE_INTENTIONAL">Nm: パラメータの間違ったパッケージのためにスーパークラスのメソッドをオ
ーバーライドしていないメソッド (NM_WRONG_PACKAGE_INTENTIONAL)</a></h3> |
1062 | 1122 |
1063 | 1123 |
1064 <p> | 1124 <p> |
1065 パラメータの型が正確にスーパークラスで対応するパラメータの型と合致していないので、サブクラスのメソッドはスーパークラスの類似したメソッドをオーバーライドしていま
せん。<br> | 1125 パラメータの型が正確にスーパークラスで対応するパラメータの型と合致していないので、サブクラスのメソッドはスーパークラスの類似したメソッドをオーバーライドしていま
せん。<br> |
1066 たとえば以下のようなコードです。 | 1126 たとえば以下のようなコードです。 |
1067 </p> | 1127 </p> |
(...skipping 21 matching lines...) Expand all Loading... |
1089 類似しているが同一ではないシグネチャのメソッドを除去するか、非推奨にすることを強く検討するべきです。 | 1149 類似しているが同一ではないシグネチャのメソッドを除去するか、非推奨にすることを強く検討するべきです。 |
1090 </p> | 1150 </p> |
1091 | 1151 |
1092 | 1152 |
1093 <h3><a name="ODR_OPEN_DATABASE_RESOURCE">ODR: データベースリソースのクローズに失敗するかもしれないメソッド (OD
R_OPEN_DATABASE_RESOURCE)</a></h3> | 1153 <h3><a name="ODR_OPEN_DATABASE_RESOURCE">ODR: データベースリソースのクローズに失敗するかもしれないメソッド (OD
R_OPEN_DATABASE_RESOURCE)</a></h3> |
1094 | 1154 |
1095 | 1155 |
1096 <p> | 1156 <p> |
1097 このメソッドは、データベースリソース (たとえば、データベースコネクションや行セット) を作成していますが、どんなフィールドにも代入していないか、他のメソッドに
も渡していないか、戻り値にもしていません。 | 1157 このメソッドは、データベースリソース (たとえば、データベースコネクションや行セット) を作成していますが、どんなフィールドにも代入していないか、他のメソッドに
も渡していないか、戻り値にもしていません。 |
1098 そして、メソッドからのすべての経路でオブジェクトをクローズするように見えません。 | 1158 そして、メソッドからのすべての経路でオブジェクトをクローズするように見えません。 |
1099 メソッドからのすべての経路でデータベースリソースのクローズ失敗は良くない性能になるかもしれません。 | 1159 メソッドからのすべての経路でデータベースリソースのクローズが失敗すると性能低下になることがあります。 |
1100 データベースとの通信で問題があるアプリケーションの原因になる可能性があります。 | 1160 データベースとの通信で問題があるアプリケーションの原因になる可能性があります。 |
1101 </p> | 1161 </p> |
1102 | 1162 |
1103 | 1163 |
1104 <h3><a name="ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH">ODR: 例外経路でデータベースリソースのクロー
ズに失敗するかもしれないメソッド (ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH)</a></h3> | 1164 <h3><a name="ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH">ODR: 例外経路でデータベースリソースのクロー
ズに失敗するかもしれないメソッド (ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH)</a></h3> |
1105 | 1165 |
1106 | 1166 |
1107 <p> | 1167 <p> |
1108 このメソッドは、データベースリソース (たとえば、データベースコネクションや行セット) を作成していますが、どんなフィールドにも代入していないか、他のメソッドに
も渡していないか、戻り値にもしていません。 | 1168 このメソッドは、データベースリソース (たとえば、データベースコネクションや行セット) を作成していますが、どんなフィールドにも代入していないか、他のメソッドに
も渡していないか、戻り値にもしていません。 |
1109 そして、メソッドからのすべての例外経路でオブジェクトをクローズするように見えません。 | 1169 そして、メソッドからのすべての例外経路でオブジェクトをクローズするように見えません。 |
1110 メソッドからのすべての経路でデータベースリソースのクローズ失敗は良くない性能になるかもしれません。 | 1170 メソッドからのすべての経路でデータベースリソースのクローズが失敗すると性能低下になることがあります。 |
1111 データベースとの通信で問題があるアプリケーションの原因になる可能性があります。 | 1171 データベースとの通信で問題があるアプリケーションの原因になる可能性があります。 |
1112 </p> | 1172 </p> |
1113 | 1173 |
1114 | 1174 |
1115 <h3><a name="OS_OPEN_STREAM">OS: ストリームのクローズに失敗するかもしれないメソッド (OS_OPEN_STREAM)</a><
/h3> | 1175 <h3><a name="OS_OPEN_STREAM">OS: ストリームのクローズに失敗するかもしれないメソッド (OS_OPEN_STREAM)</a><
/h3> |
1116 | 1176 |
1117 | 1177 |
1118 <p> | 1178 <p> |
1119 このメソッドは、入出力ストリームオブジェクトを作成していますが、どんなフィールドにも代入していないしクローズするかもしれない別のメソッドにも渡していなくて、戻り
値にしてもいません。そして、メソッドからのすべての経路でクローズするように見えません。 | 1179 このメソッドは、入出力ストリームオブジェクトを作成していますが、どんなフィールドにも代入していないしクローズするかもしれない別のメソッドにも渡していなくて、戻り
値にしてもいません。そして、メソッドからのすべての経路でクローズするように見えません。 |
1120 これは、ファイルディスクリプタリークになるかもしれません。 | 1180 これはファイルディスクリプタリークの原因になることがあります。 |
1121 ストリームがクローズされることを確実にするために <code>finally</code> ブロックを使うことは、一般に良い考えです。 | 1181 ストリームがクローズされることを確実にするために <code>finally</code> ブロックを使用することは一般的に良い考えです。 |
1122 </p> | 1182 </p> |
1123 | 1183 |
1124 | 1184 |
1125 <h3><a name="OS_OPEN_STREAM_EXCEPTION_PATH">OS: 例外経路でストリームのクローズに失敗するかもしれないメソッド (
OS_OPEN_STREAM_EXCEPTION_PATH)</a></h3> | 1185 <h3><a name="OS_OPEN_STREAM_EXCEPTION_PATH">OS: 例外経路でストリームのクローズに失敗するかもしれないメソッド (
OS_OPEN_STREAM_EXCEPTION_PATH)</a></h3> |
1126 | 1186 |
1127 | 1187 |
1128 <p> | 1188 <p> |
1129 このメソッドは、入出力ストリームオブジェクトを作成していますが、どんなフィールドにも代入していないしクローズするかもしれない別のメソッドにも渡していないくて、戻
り値にしてもいません。そして、メソッドからのすべての可能性がある例外経路でクローズするように見えません。 | 1189 このメソッドは、入出力ストリームオブジェクトを作成していますが、どんなフィールドにも代入していないしクローズするかもしれない別のメソッドにも渡していないくて、戻
り値にしてもいません。そして、メソッドからのすべての可能性がある例外経路でクローズするように見えません。 |
1130 これはファイルディスクリプターリークになるかもしれません。 | 1190 これはファイルディスクリプターリークの原因になることがあります。 |
1131 ストリームがクローズされることを確実にするために <code>finally</code> ブロックを使うことは、一般に良い考えです。 | 1191 ストリームがクローズされることを確実にするために <code>finally</code> ブロックを使用することは一般的に良い考えです。 |
1132 </p> | 1192 </p> |
1133 | 1193 |
1134 | 1194 |
1135 <h3><a name="PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS">PZ: 繰り返しでエントリオブジェクトを再利用しな
い (PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS)</a></h3> | 1195 <h3><a name="PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS">PZ: 繰り返しでエントリオブジェクトを再利用しな
い (PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS)</a></h3> |
1136 | 1196 |
1137 | 1197 |
1138 <p> | 1198 <p> |
1139 このクラスは、Iterator と Map.Entry で基底 Map のビューを返すことを許可された両方の entrySet メソッドがあります。 | 1199 このクラスは、Iterator と Map.Entry で基底 Map のビューを返すことを許可された両方の entrySet メソッドがあります。 |
1140 この巧妙なアイデアは、Map 実装で使用されましたが、厄介なコーディング間違いの可能性を取り込みました。 | 1200 この巧妙なアイデアは、Map 実装で使用されましたが、厄介なコーディング間違いの可能性を取り込みました。 |
1141 Map <code>m</code> が entrySet のためのそのような反復子を返すならば、<code>c.addAll(m.entrySet())</c
ode> はひどく間違っているでしょう。 | 1201 Map <code>m</code> が entrySet のためのそのような反復子を返すならば、<code>c.addAll(m.entrySet())</c
ode> はひどく間違っているでしょう。 |
1142 OpenJDK 1.7 の すべての Map 実装はこれを回避するために書き直されました。 | 1202 OpenJDK 1.7 の すべての Map 実装はこれを回避するために書き直されました。 |
1143 </p> | 1203 </p> |
1144 | 1204 |
1145 | 1205 |
1146 <h3><a name="RC_REF_COMPARISON_BAD_PRACTICE">RC: 定数への疑わしい参照比較 (RC_REF_COMPARISON
_BAD_PRACTICE)</a></h3> | 1206 <h3><a name="RC_REF_COMPARISON_BAD_PRACTICE">RC: 定数への疑わしい参照比較 (RC_REF_COMPARISON
_BAD_PRACTICE)</a></h3> |
1147 | 1207 |
1148 | 1208 |
1149 <p> | 1209 <p> |
1150 このメソッドは、 参照値を == または != 演算子を使用して定数と比較しています。 | 1210 このメソッドは、 参照値を == または != 演算子を使用して定数と比較しています。 |
1151 この型のインスタンスを比較する正しい方法は、一般に <code>equals</code> メソッドです。 | 1211 一般的にこの型のインスタンスを比較する正しい方法は <code>equals</code> メソッドです。 |
1152 等価で識別可能なインスタンスを作成する可能性がありますが異なるオブジェクトなので == で比較しないでください。 | 1212 等価で識別可能なインスタンスを作成する可能性がありますが異なるオブジェクトなので == で比較しないでください。 |
1153 参照によって一般に比較されるべきではないクラスの例は、<code>java.lang.Integer</code> 、<code>java.lang.Float
</code> などです。 | 1213 一般的に参照によって比較されるべきではないクラスの例は、<code>java.lang.Integer</code> 、<code>java.lang.Floa
t</code> などです。 |
1154 </p> | 1214 </p> |
1155 | 1215 |
1156 | 1216 |
1157 <h3><a name="RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN">RC: Boolean 値の疑わしい参照比較 (RC_
REF_COMPARISON_BAD_PRACTICE_BOOLEAN)</a></h3> | 1217 <h3><a name="RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN">RC: Boolean 値の疑わしい参照比較 (RC_
REF_COMPARISON_BAD_PRACTICE_BOOLEAN)</a></h3> |
1158 | 1218 |
1159 | 1219 |
1160 <p> | 1220 <p> |
1161 このメソッドは、== または != 演算子を使用して2つの Boolean 値を比較しています。 | 1221 このメソッドは、== または != 演算子を使用して2つの Boolean 値を比較しています。 |
1162 一般には2つの Boolean 値 (<code>Boolean.TRUE</code> と <code>Boolean.FALSE</code>) だけですが
、 | 1222 一般的には2つの Boolean 値 (<code>Boolean.TRUE</code> と <code>Boolean.FALSE</code>) だけです
が、 |
1163 <code>new Boolean(b)</code> コンストラクタを使用して他の Boolean オブジェクトを作成する可能性があります。 | 1223 <code>new Boolean(b)</code> コンストラクタを使用して他の Boolean オブジェクトを作成する可能性があります。 |
1164 そのようなオブジェクトを回避することは最高です。 | 1224 そのようなオブジェクトを回避することは最高です。 |
1165 しかし、それらが存在するなら、Boolean オブジェクトの等価性をチェックするために <code>.equals(...)</code> ではなく == また
は != を使用しているなら異なる結果をもたらします。 | 1225 しかし、それらが存在するなら、Boolean オブジェクトの等価性をチェックするために <code>.equals(...)</code> ではなく == また
は != を使用しているなら異なる結果をもたらします。 |
1166 </p> | 1226 </p> |
1167 | 1227 |
1168 | 1228 |
1169 <h3><a name="RR_NOT_CHECKED">RR: InputStream.read() の戻り値を無視しているメソッド (RR_NOT_CHEC
KED)</a></h3> | 1229 <h3><a name="RR_NOT_CHECKED">RR: InputStream.read() の戻り値を無視しているメソッド (RR_NOT_CHEC
KED)</a></h3> |
1170 | 1230 |
1171 | 1231 |
1172 <p> | 1232 <p> |
(...skipping 12 matching lines...) Expand all Loading... |
1185 これは潜在的なバグで、多くのプログラムでは、入力ストリームからのスキップは、通常要求した完全なデータ量をスキップをしますが、散発的に失敗することがあります。 | 1245 これは潜在的なバグで、多くのプログラムでは、入力ストリームからのスキップは、通常要求した完全なデータ量をスキップをしますが、散発的に失敗することがあります。 |
1186 しかしながら、バッファードストリーム での <code>skip</code> メソッドはバッファのデータをスキップするので要求されたバイト数のスキップは常に失
敗します。 | 1246 しかしながら、バッファードストリーム での <code>skip</code> メソッドはバッファのデータをスキップするので要求されたバイト数のスキップは常に失
敗します。 |
1187 </p> | 1247 </p> |
1188 | 1248 |
1189 | 1249 |
1190 <h3><a name="RV_NEGATING_RESULT_OF_COMPARETO">RV: compareTo()/compare() の結果を無効にす
る (RV_NEGATING_RESULT_OF_COMPARETO)</a></h3> | 1250 <h3><a name="RV_NEGATING_RESULT_OF_COMPARETO">RV: compareTo()/compare() の結果を無効にす
る (RV_NEGATING_RESULT_OF_COMPARETO)</a></h3> |
1191 | 1251 |
1192 | 1252 |
1193 <p> | 1253 <p> |
1194 このコードは、<code>compareTo</code> または <code>compare</code> メソッドの戻り値を無効にしています。 | 1254 このコードは、<code>compareTo</code> または <code>compare</code> メソッドの戻り値を無効にしています。 |
1195 これは疑わしいか間違ったプログラミングプラクティスです。戻り値が Integer.MIN_VALUE なので、戻り値を無効にすることは結果の符号を無効にしません
。 | 1255 これは疑わしいかバッドプログラミングプラクティスです。戻り値が Integer.MIN_VALUE なので、戻り値を無効にすることは結果の符号を無効にしません。 |
1196 結果を無効にするのではなくオペランドの順序を逆にすることによって、同じ意図した結果を得ることができます。 | 1256 結果を無効にするのではなくオペランドの順序を逆にすることによって、同じ意図した結果を得ることができます。 |
1197 </p> | 1257 </p> |
1198 | 1258 |
1199 | 1259 |
1200 <h3><a name="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE">RV: 例外的戻り値を無視しているメソッド (RV_RET
URN_VALUE_IGNORED_BAD_PRACTICE)</a></h3> | 1260 <h3><a name="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE">RV: 例外的戻り値を無視しているメソッド (RV_RET
URN_VALUE_IGNORED_BAD_PRACTICE)</a></h3> |
1201 | 1261 |
1202 | 1262 |
1203 <p> | 1263 <p> |
1204 このメソッドはチェックされていない値を返しています。 | 1264 このメソッドはチェックされていない値を返しています。 |
1205 戻り値は異常か予想外の実行結果を示す可能性があるのでチェックするべきです。 | 1265 戻り値は異常か予想外の実行結果を示す可能性があるのでチェックするべきです。 |
1206 たとえば、<code>File.delete()</code> はファイルをうまく削除できなかったなら、例外をスローするのではなく false を返します。 | 1266 たとえば、<code>File.delete()</code> はファイルをうまく削除できなかったなら、例外をスローするのではなく false を返します。 |
1207 結果をチェックしないなら例外的戻り値を返すメソッドの呼び出しで予想外の振る舞いの合図に気づきません。 | 1267 結果をチェックしないなら例外的戻り値を返すメソッドの呼び出しで予想外の振る舞いの合図に気づきません。 |
1208 </p> | 1268 </p> |
1209 | 1269 |
1210 | 1270 |
1211 <h3><a name="SI_INSTANCE_BEFORE_FINALS_ASSIGNED">SI: スタティックイニシャライザは、すべての static
final フィールドが代入される前にインスタンスを作成する (SI_INSTANCE_BEFORE_FINALS_ASSIGNED)</a></h3> | 1271 <h3><a name="SI_INSTANCE_BEFORE_FINALS_ASSIGNED">SI: スタティックイニシャライザは、すべての static
final フィールドが代入される前にインスタンスを作成する (SI_INSTANCE_BEFORE_FINALS_ASSIGNED)</a></h3> |
1212 | 1272 |
1213 | 1273 |
1214 <p> | 1274 <p> |
1215 すべての static final フィールドが初期化される前に、スタティックイニシャライザがクラスのインスタンスを作成します。 | 1275 すべての static final フィールドが初期化される前にスタティックイニシャライザがクラスのインスタンスを作成します。 |
1216 </p> | 1276 </p> |
1217 | 1277 |
1218 | 1278 |
1219 <h3><a name="SW_SWING_METHODS_INVOKED_IN_SWING_THREAD">SW: Swing メソッドは AWT イベントデ
ィスパッチスレッドから呼び出す必要がある (SW_SWING_METHODS_INVOKED_IN_SWING_THREAD)</a></h3> | 1279 <h3><a name="SW_SWING_METHODS_INVOKED_IN_SWING_THREAD">SW: Swing メソッドは AWT イベントデ
ィスパッチスレッドから呼び出す必要がある (SW_SWING_METHODS_INVOKED_IN_SWING_THREAD)</a></h3> |
1220 | 1280 |
1221 | 1281 |
1222 <p> | 1282 <p> |
1223 (<a href="http://web.archive.org/web/20090526170426/http://java.sun.com/develope
r/JDCTechTips/2003/tt1208.html">From JDC Tech Tip</a>)<br> | 1283 (<a href="http://web.archive.org/web/20090526170426/http://java.sun.com/develope
r/JDCTechTips/2003/tt1208.html">From JDC Tech Tip</a>)<br> |
1224 に解説されているとおり、Swing のメソッド、<code>show</code> メソッド、<code>setVisible</code> メソッド、<cod
e>pack</code> メソッドは、フレームのために関連したピアを作成します。 | 1284 に解説されているとおり、Swing のメソッド、<code>show</code> メソッド、<code>setVisible</code> メソッド、<cod
e>pack</code> メソッドは、フレームのための関連したピアを作成します。 |
1225 ピアの作成で、システムはイベントディスパッチスレッドを作成します。 | 1285 ピアの作成で、システムはイベントディスパッチスレッドを作成します。 |
1226 これが問題になることがあります。なぜなら <code>pack</code> メソッドと <code>validate</code> メソッドがまだ処理中でもイ
ベントディスパッチスレッドがリスナに通知できるからです。 | 1286 これが問題になることがあります。なぜなら <code>pack</code> メソッドと <code>validate</code> メソッドがまだ処理中でもイ
ベントディスパッチスレッドがリスナに通知できるからです。 |
1227 この状況は、2つのスレッドが Swing コンポーネントにアクセスする可能性があり、デッドロックや、その他のスレッドに関する問題になる可能性がある重大な欠陥です
。 | 1287 この状況は、2つのスレッドが Swing コンポーネントにアクセスする可能性があり、デッドロックや、その他のスレッドに関する問題になる可能性がある重大な欠陥です
。 |
1228 <code>pack</code> メソッドの呼び出しはコンポーネントを実体化させます。実体化しているときに、イベントディスパッチスレッドがリスナへの通知を開始
する可能性があります。 | 1288 <code>pack</code> メソッドの呼び出しはコンポーネントを実体化させます。実体化しているときに、イベントディスパッチスレッドがリスナへの通知を開始
する可能性があります。 |
1229 </p> | 1289 </p> |
1230 | 1290 |
1231 | 1291 |
1232 <h3><a name="SE_BAD_FIELD">Se: 直列化可能クラスの非 transient で非直列化可能なインスタンスフィールド (SE_BAD_
FIELD)</a></h3> | 1292 <h3><a name="SE_BAD_FIELD">Se: 直列化可能クラスの非 transient で非直列化可能なインスタンスフィールド (SE_BAD_
FIELD)</a></h3> |
1233 | 1293 |
1234 | 1294 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1271 コンパレータが <code>TreeMap</code> のような順序付きコレクションを構築するために使われるなら、コンパレータが直列化可能な場合だけ、<cod
e>TreeMap</code> は直列化可能です。 | 1331 コンパレータが <code>TreeMap</code> のような順序付きコレクションを構築するために使われるなら、コンパレータが直列化可能な場合だけ、<cod
e>TreeMap</code> は直列化可能です。 |
1272 大部分のコンパレータがほとんど状態を持たないとしても直列化可能にすることは簡単で良い防衛的なプログラミングです。 | 1332 大部分のコンパレータがほとんど状態を持たないとしても直列化可能にすることは簡単で良い防衛的なプログラミングです。 |
1273 </p> | 1333 </p> |
1274 | 1334 |
1275 | 1335 |
1276 <h3><a name="SE_INNER_CLASS">Se: 直列化可能な内部クラス (SE_INNER_CLASS)</a></h3> | 1336 <h3><a name="SE_INNER_CLASS">Se: 直列化可能な内部クラス (SE_INNER_CLASS)</a></h3> |
1277 | 1337 |
1278 | 1338 |
1279 <p> | 1339 <p> |
1280 この直列化可能なクラスは内部クラスです。内部クラスを直列化しようとすると関連した外部クラスのインスタンスも直列化します。 | 1340 この直列化可能なクラスは内部クラスです。内部クラスを直列化しようとすると関連した外部クラスのインスタンスも直列化します。 |
1281 外部クラスのインスタンスは直列化可能なので失敗しませんが、意図したことよりもっとずっと多くのデータを直列化するかもしれません。 | 1341 外部クラスのインスタンスは直列化可能なので失敗しません。しかし、意図していたよりももっと多くのデータを直列化するかもしれません。 |
1282 できれば、内部クラスを static にして問題を解決するべきです。 | 1342 できれば、内部クラスを static にして問題を解決するべきです。 |
1283 </p> | 1343 </p> |
1284 | 1344 |
1285 | 1345 |
1286 <h3><a name="SE_NONFINAL_SERIALVERSIONID">Se: serialVersionUID が final ではない (SE_
NONFINAL_SERIALVERSIONID)</a></h3> | 1346 <h3><a name="SE_NONFINAL_SERIALVERSIONID">Se: serialVersionUID が final ではない (SE_
NONFINAL_SERIALVERSIONID)</a></h3> |
1287 | 1347 |
1288 | 1348 |
1289 <p> | 1349 <p> |
1290 このクラスは、final でない <code>serialVersionUID</code> フィールドを定義しています。 | 1350 このクラスは、final でない <code>serialVersionUID</code> フィールドを定義しています。 |
1291 直列化を目的としてバージョン UID を指定することを意図しているならフィールドは final とすべきです。 | 1351 直列化を目的としてバージョン UID を指定することを意図しているならフィールドは final とすべきです。 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1335 | 1395 |
1336 <p> | 1396 <p> |
1337 <code>readResolve</code> メソッドが直列化機構で認識されるためには戻り値の型が <code>Object</code> で宣言されなけれ
ばなりません。 | 1397 <code>readResolve</code> メソッドが直列化機構で認識されるためには戻り値の型が <code>Object</code> で宣言されなけれ
ばなりません。 |
1338 </p> | 1398 </p> |
1339 | 1399 |
1340 | 1400 |
1341 <h3><a name="SE_TRANSIENT_FIELD_NOT_RESTORED">Se: 直列化復元によって設定されない transient フィール
ド (SE_TRANSIENT_FIELD_NOT_RESTORED)</a></h3> | 1401 <h3><a name="SE_TRANSIENT_FIELD_NOT_RESTORED">Se: 直列化復元によって設定されない transient フィール
ド (SE_TRANSIENT_FIELD_NOT_RESTORED)</a></h3> |
1342 | 1402 |
1343 | 1403 |
1344 <p> | 1404 <p> |
1345 このクラスには複数の場所で更新されるフィールドがあります。したがって、このクラスの状態の一部であると思われます。 | 1405 このクラスには複数の場所で更新されるフィールドがあります。したがって、このクラスの状態の一部だと思われます。 |
1346 しかしながら、フィールドは transient と宣言しているので、 readObject/readResolve で値が設定されません。 | 1406 しかしながら、フィールドは transient と宣言しているので、 readObject/readResolve で値が設定されません。 |
1347 クラスの直列化復元されたインスタンスにはデフォルト値が設定されます。 | 1407 クラスの直列化復元されたインスタンスにはデフォルト値が設定されます。 |
1348 </p> | 1408 </p> |
1349 | 1409 |
1350 | 1410 |
1351 <h3><a name="SE_NO_SERIALVERSIONID">SnVI: Serializable なクラスが serialVersionUID を定
義していない (SE_NO_SERIALVERSIONID)</a></h3> | 1411 <h3><a name="SE_NO_SERIALVERSIONID">SnVI: Serializable なクラスが serialVersionUID を定
義していない (SE_NO_SERIALVERSIONID)</a></h3> |
1352 | 1412 |
1353 | 1413 |
1354 <p> | 1414 <p> |
1355 このクラスは <code>Serializable</code> インタフェースを実装していますが、<code>serialVersionUID</code>
フィールドを定義していません。 | 1415 このクラスは <code>Serializable</code> インタフェースを実装していますが、<code>serialVersionUID</code>
フィールドを定義していません。 |
1356 .class オブジェクトへの参照を追加するのと同じくらい簡単な変更でクラスに合成フィールドを追加します。 | 1416 .class オブジェクトへの参照を追加するのと同じくらい簡単な変更でクラスに合成フィールドを追加します。 |
1357 それは、残念ながら暗黙の <code>serialVersionUID</code> を変えます (たとえば、<code>String.class</code>
への参照を追加すると、<code>class$java$lang$String</code> という static フィールドを生成します)。 | 1417 それは、残念ながら暗黙の <code>serialVersionUID</code> を変えます (たとえば、<code>String.class</code>
への参照を追加すると、<code>class$java$lang$String</code> という static フィールドを生成します)。 |
1358 また、バイトコードコンパイラへの異なるソースコードは、クラスオブジェクトまたは内部クラスに参照のために生成される合成変数のために異なる命名規則を使用するかもしれ
ません。 | 1418 また、バイトコードコンパイラへの異なるソースコードは、クラスオブジェクトまたは内部クラスを参照するために生成される合成変数のために異なる命名規則を使用するかもし
れません。 |
1359 バージョンを横断する Serializable の相互運用性を保証するために、明示的に、serialVersionUID を追加することを検討してください。 | 1419 バージョンを横断する Serializable の相互運用性を保証するために明示的に serialVersionUID を追加することを検討してください。 |
1360 </p> | 1420 </p> |
1361 | 1421 |
1362 | 1422 |
1363 <h3><a name="UI_INHERITANCE_UNSAFE_GETRESOURCE">UI: クラスが拡張されるなら getResource の使い方
は安全ではないかもしれない (UI_INHERITANCE_UNSAFE_GETRESOURCE)</a></h3> | 1423 <h3><a name="UI_INHERITANCE_UNSAFE_GETRESOURCE">UI: クラスが拡張されるなら getResource の使い方
は安全ではないかもしれない (UI_INHERITANCE_UNSAFE_GETRESOURCE)</a></h3> |
1364 | 1424 |
1365 | 1425 |
1366 <p> | 1426 <p> |
1367 このクラスが別のパッケージによって拡張されるなら、<code>this.getClass().getResource(...)</code> の呼び出しは予想外
の結果をもたらす可能性があります。 | 1427 このクラスが別のパッケージによって拡張されるなら、<code>this.getClass().getResource(...)</code> の呼び出しは予想外
の結果をもたらす可能性があります。 |
1368 </p> | 1428 </p> |
1369 | 1429 |
1370 | 1430 |
1371 <h3><a name="BC_IMPOSSIBLE_CAST">BC: 不可能なキャスト (BC_IMPOSSIBLE_CAST)</a></h3> | 1431 <h3><a name="BC_IMPOSSIBLE_CAST">BC: 不可能なキャスト (BC_IMPOSSIBLE_CAST)</a></h3> |
1372 | 1432 |
1373 | 1433 |
1374 <p> | 1434 <p> |
1375 このキャストは、常に ClassCastException をスローします。 | 1435 このキャストは、常に ClassCastException をスローします。 |
1376 FindBugs は、instanceof チェックから型情報を調査して、メソッドからの戻り値とフィールドからロードされた値の型について、より多くの正確な情報を
使用します。 | 1436 FindBugs は、instanceof チェックから型情報を調査して、メソッドからの戻り値とフィールドからロードされた値の型について、より多くの正確な情報を
使用します。 |
1377 したがって、宣言された変数の型にはより多くの正確な情報があるかもしれないしれません。 | 1437 したがって、宣言された変数の型にはより多くの正確な情報があるかもしれないしれません。 |
1378 そして、キャストが常に実行時例外をスローするのか判定するために使用する可能性があります。 | 1438 また、キャストが常に実行時例外をスローするのかを決定するために利用する可能性があります。 |
1379 </p> | 1439 </p> |
1380 | 1440 |
1381 | 1441 |
1382 <h3><a name="BC_IMPOSSIBLE_DOWNCAST">BC: 不可能なダウンキャスト (BC_IMPOSSIBLE_DOWNCAST)</a
></h3> | 1442 <h3><a name="BC_IMPOSSIBLE_DOWNCAST">BC: 不可能なダウンキャスト (BC_IMPOSSIBLE_DOWNCAST)</a
></h3> |
1383 | 1443 |
1384 | 1444 |
1385 <p> | 1445 <p> |
1386 このキャストは、常に ClassCastException をスローします。 | 1446 このキャストは、常に ClassCastException をスローします。 |
1387 解析はキャストしている値の正確な型がわかっていると信じています。 | 1447 解析はキャストしている値の正確な型がわかっていると信じています。 |
1388 そして、サブタイプへダウンキャストしようとする試みは、ClassCastException のスローによって常に失敗します。 | 1448 そして、サブタイプへダウンキャストしようとする試みは、ClassCastException のスローによって常に失敗します。 |
1389 </p> | 1449 </p> |
1390 | 1450 |
1391 | 1451 |
1392 <h3><a name="BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: toArray メソッドの結果の不可能なダウンキャスト
(BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY)</a></h3> | 1452 <h3><a name="BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY">BC: toArray メソッドの結果の不可能なダウンキャスト
(BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY)</a></h3> |
1393 | 1453 |
1394 | 1454 |
1395 <p> | 1455 <p> |
1396 このコードは、以下のように、<code>Object[]</code> より特定の型のコレクションで <code>toArray</code> メソッドを呼び出
す結果をキャストしています。 | 1456 このコードは、以下のように、<code>Object[]</code> より特定の型のコレクションで <code>toArray</code> メソッドを呼び出
す結果をキャストしています。 |
1397 </p> | 1457 </p> |
1398 <blockquote><pre> | 1458 <blockquote><pre> |
1399 String[] getAsArray(Collection<String> c) { | 1459 String[] getAsArray(Collection<String> c) { |
1400 return (String[]) c.toArray(); | 1460 return (String[]) c.toArray(); |
1401 } | 1461 } |
1402 </pre></blockquote> | 1462 </pre></blockquote> |
1403 <p> | 1463 <p> |
1404 これは通常、ClassCastException をスローして失敗します。 | 1464 これは通常 ClassCastException をスローして失敗します。 |
1405 ほとんどすべてのコレクションの <code>toArray</code> メソッドは、<code>Object[]</code> を返します。 | 1465 ほとんどすべてのコレクションの <code>toArray</code> メソッドは、<code>Object[]</code> を返します。 |
1406 Collection オブジェクトは宣言された総称型コレクションの参照がないので、本当に何もできません。 | 1466 Collection オブジェクトは宣言された総称型コレクションの参照がないので、本当に何もできません。 |
1407 コレクションから特定の型の配列を得る正しい方法は、<code>c.toArray(new String[]);</code> または <code>c.toArr
ay(new String[c.size()]);</code> (後者はわずかにより効率的です) を使うことです。 | 1467 コレクションから特定の型の配列を得る正しい方法は、<code>c.toArray(new String[]);</code> または <code>c.toArr
ay(new String[c.size()]);</code> (後者はわずかにより効率的です) を使用することです。 |
1408 これに対する1つの共通の知られている例外があります。 | 1468 これに対する1つの共通の知られている例外があります。 |
1409 <code>Arrays.asList(...)</code>によって返されるリストの <code>toArray()</code> メソッドは、共変な配列を返
します。 | 1469 <code>Arrays.asList(...)</code>によって返されるリストの <code>toArray()</code> メソッドは共変型配列を返し
ます。 |
1410 たとえば、<code>Arrays.asArray(new String[] { "a" }).toArray()</code> は <code>String
[]</code> を返します。 | 1470 たとえば、<code>Arrays.asArray(new String[] { "a" }).toArray()</code> は <code>String
[]</code> を返します。 |
1411 FindBugs はそのようなケースを検出して抑止しようとしますが、いくつか見落とすかもしれません。 | 1471 FindBugs はそのようなケースを検出して抑止しようとしますが、見落としているかもしれません。 |
1412 </p> | 1472 </p> |
1413 | 1473 |
1414 | 1474 |
1415 <h3><a name="BC_IMPOSSIBLE_INSTANCEOF">BC: 常に false を返す instanceof (BC_IMPOSSIBL
E_INSTANCEOF)</a></h3> | 1475 <h3><a name="BC_IMPOSSIBLE_INSTANCEOF">BC: 常に false を返す instanceof (BC_IMPOSSIBL
E_INSTANCEOF)</a></h3> |
1416 | 1476 |
1417 | 1477 |
1418 <p> | 1478 <p> |
1419 この instanceof は常に false を返します。これは安全で、誤解や論理エラーを指摘していないことを確認してください。 | 1479 この instanceof は常に false を返します。これは安全で、誤解や論理エラーを指摘していないことを確認してください。 |
1420 </p> | 1480 </p> |
1421 | 1481 |
(...skipping 23 matching lines...) Expand all Loading... |
1445 for(int i = 0; i < 4; i++) | 1505 for(int i = 0; i < 4; i++) |
1446 result = ((result << 8) + (b[i] & 0xff)); | 1506 result = ((result << 8) + (b[i] & 0xff)); |
1447 </pre></blockquote> | 1507 </pre></blockquote> |
1448 | 1508 |
1449 | 1509 |
1450 <h3><a name="BIT_AND">BIT: 互換性のないビットマスク (BIT_AND)</a></h3> | 1510 <h3><a name="BIT_AND">BIT: 互換性のないビットマスク (BIT_AND)</a></h3> |
1451 | 1511 |
1452 | 1512 |
1453 <p> | 1513 <p> |
1454 このメソッドは、<i>(e & C)</i> 形式の式を <i>D</i> と比較しています。 | 1514 このメソッドは、<i>(e & C)</i> 形式の式を <i>D</i> と比較しています。 |
1455 定数 <i>C</i> と <i>D</i> の特定の値と常に等しくないことを比較します。論理エラーかタイプミスかもしれません。 | 1515 定数 <i>C</i> の特定の値と <i>D</i> ために常に等しくないことを比較します。論理エラーかタイプミスかもしれません。 |
1456 </p> | 1516 </p> |
1457 | 1517 |
1458 | 1518 |
1459 <h3><a name="BIT_AND_ZZ">BIT: ((...) & 0) == 0 なのか確かめている (BIT_AND_ZZ)</a></h3> | 1519 <h3><a name="BIT_AND_ZZ">BIT: ((...) & 0) == 0 なのか確かめている (BIT_AND_ZZ)</a></h3> |
1460 | 1520 |
1461 | 1521 |
1462 <p> | 1522 <p> |
1463 このメソッドは、<i>(e & 0)</i> 形式の式を0と比較しています。それは、常に等価であることを比較します。論理エラーかタイプミスかもしれません
。 | 1523 このメソッドは、<i>(e & 0)</i> 形式の式を0と比較しています。それは、常に等価であることを比較します。論理エラーかタイプミスかもしれません
。 |
1464 </p> | 1524 </p> |
1465 | 1525 |
1466 | 1526 |
1467 <h3><a name="BIT_IOR">BIT: 互換性のないビットマスク (BIT_IOR)</a></h3> | 1527 <h3><a name="BIT_IOR">BIT: 互換性のないビットマスク (BIT_IOR)</a></h3> |
1468 | 1528 |
1469 | 1529 |
1470 <p> | 1530 <p> |
1471 このメソッドは、<code>(e | C)</code> 形式の式を <code>D</code> と比較しています。 | 1531 このメソッドは、<code>(e | C)</code> 形式の式を <code>D</code> と比較しています。 |
1472 定数 <i>C</i> と <i>D</i> の特定の値と常に等しくないことを比較します。論理エラーかタイプミスかもしれません。 | 1532 定数 <i>C</i> の特定の値と <i>D</i> のために常に等しくないことを比較します。論理エラーかタイプミスかもしれません。 |
1473 </p> | 1533 </p> |
1474 <p> | 1534 <p> |
1475 典型的に、このバグは、ビットセットで帰属関係のテストを実行したいコードで発生します。 | 1535 典型的に、このバグは、ビットセットで帰属関係のテストを実行したいコードで発生します。 |
1476 しかし、ビット論理積演算子 ("&") の代わりにビット論理和演算子 ("|") を使用しています。 | 1536 しかし、ビット論理積演算子 ("&") の代わりにビット論理和演算子 ("|") を使用しています。 |
1477 </p> | 1537 </p> |
1478 | 1538 |
1479 | 1539 |
1480 <h3><a name="BIT_IOR_OF_SIGNED_BYTE">BIT: 符号付きバイト値のビット論理和 (BIT_IOR_OF_SIGNED_BYT
E)</a></h3> | 1540 <h3><a name="BIT_IOR_OF_SIGNED_BYTE">BIT: 符号付きバイト値のビット論理和 (BIT_IOR_OF_SIGNED_BYT
E)</a></h3> |
1481 | 1541 |
1482 | 1542 |
(...skipping 23 matching lines...) Expand all Loading... |
1506 </pre></blockquote> | 1566 </pre></blockquote> |
1507 | 1567 |
1508 | 1568 |
1509 <h3><a name="BIT_SIGNED_CHECK_HIGH_BIT">BIT: ビット演算の符号をチェックする (BIT_SIGNED_CHECK_H
IGH_BIT)</a></h3> | 1569 <h3><a name="BIT_SIGNED_CHECK_HIGH_BIT">BIT: ビット演算の符号をチェックする (BIT_SIGNED_CHECK_H
IGH_BIT)</a></h3> |
1510 | 1570 |
1511 | 1571 |
1512 <p> | 1572 <p> |
1513 このメソッドは、<code>((event.detail & SWT.SELECTED) > 0)</code> のような式を比較しています。 | 1573 このメソッドは、<code>((event.detail & SWT.SELECTED) > 0)</code> のような式を比較しています。 |
1514 ビット演算をより大きい演算子で比較することは、予想外の結果 (もちろん、<code>SWT.SELECTED</code> の値による) の原因になる可能性があ
ります。 | 1574 ビット演算をより大きい演算子で比較することは、予想外の結果 (もちろん、<code>SWT.SELECTED</code> の値による) の原因になる可能性があ
ります。 |
1515 <code>SWT.SELECTED</code> が負数であるなら、これはバグの候補です。 | 1575 <code>SWT.SELECTED</code> が負数であるなら、これはバグの候補です。 |
1516 <code>SWT.SELECTED</code> が負ではないとしても、'> 0' の代わりに '!= 0' を使うことは良いプラクティスと思われます。 | 1576 <code>SWT.SELECTED</code> が負ではないとしても、'> 0' の代わりに '!= 0' を使用することは良いプラクティスと思われま
す。 |
1517 </p> | 1577 </p> |
1518 <p> | 1578 <p> |
1519 Boris Bokowski | 1579 Boris Bokowski |
1520 </p> | 1580 </p> |
1521 | 1581 |
1522 | 1582 |
1523 <h3><a name="BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: スーパークラスの Adapter で実装されるメソッドを誤ってオ
ーバーライドしているクラス (BOA_BADLY_OVERRIDDEN_ADAPTER)</a></h3> | 1583 <h3><a name="BOA_BADLY_OVERRIDDEN_ADAPTER">BOA: スーパークラスの Adapter で実装されるメソッドを誤ってオ
ーバーライドしているクラス (BOA_BADLY_OVERRIDDEN_ADAPTER)</a></h3> |
1524 | 1584 |
1525 | 1585 |
1526 <p> | 1586 <p> |
1527 このメソッドは、スーパークラスで実装されているメソッドをオーバーライドしています。 | 1587 このメソッドは、スーパークラスで実装されているメソッドをオーバーライドしています。 |
1528 スーパークラスは、java.awt.event や javax.swing.event パッケージで定義されているリスナを実装する Adapter です。 | 1588 スーパークラスは、java.awt.event や javax.swing.event パッケージで定義されているリスナを実装する Adapter です。 |
1529 その結果、イベントが発生するときこのメソッドは呼び出されません。 | 1589 その結果、イベントが発生するときこのメソッドは呼び出されません。 |
1530 </p> | 1590 </p> |
1531 | 1591 |
1532 | 1592 |
| 1593 <h3><a name="BSHIFT_WRONG_ADD_PRIORITY">BSHIFT: シフト演算の正しくない構文解析の可能性がある (BSHIFT_W
RONG_ADD_PRIORITY)</a></h3> |
| 1594 |
| 1595 |
| 1596 <p> |
| 1597 コードは (x << 8 + y) のような操作を行います。 |
| 1598 これは正しいかもしれませんが、おそらく (x << 8) + y を行うことを意図していました。 |
| 1599 しかし、シフト演算は優先順位が低いので、実際には x << (8 + y) として構文解析されます。 |
| 1600 </p> |
| 1601 |
| 1602 |
1533 <h3><a name="ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32ビット int の-31から31の範囲を超えた量によるシフト (I
CAST_BAD_SHIFT_AMOUNT)</a></h3> | 1603 <h3><a name="ICAST_BAD_SHIFT_AMOUNT">BSHIFT: 32ビット int の-31から31の範囲を超えた量によるシフト (I
CAST_BAD_SHIFT_AMOUNT)</a></h3> |
1534 | 1604 |
1535 | 1605 |
1536 <p> | 1606 <p> |
1537 このコードは、32ビット int の-31から31の範囲を超えた量でシフトを実行しています。 | 1607 このコードは、32ビット int の-31から31の範囲を超えた量でシフトを実行しています。 |
1538 これの効果は、どのくらいシフトするのかを決めるために整数値の下位5ビット (32で割った余り) を使うことです (たとえば、40ビットでシフトすることは8ビット
でシフトすることと同じで、32ビットでシフトすることは0ビットでシフトすることと同じです)。 | 1608 これの効果は、どのくらいシフトするのかを決めるために整数値の下位5ビット (32で割った余り) を使用することです (たとえば、40ビットでシフトすることは8ビ
ットでシフトすることと同じで、32ビットでシフトすることは0ビットでシフトすることと同じです)。 |
1539 これは、おそらく期待されたことではなく、少なくとも紛らわしいです。 | 1609 これはおそらく期待されたことではなく、少なくとも紛らわしいです。 |
1540 </p> | 1610 </p> |
1541 | 1611 |
1542 | 1612 |
1543 <h3><a name="BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR">Bx: プリミティブ値が3項演算子のためにア
ンボクシングされて、型変換される (BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR)</a></h3> | 1613 <h3><a name="DLS_DEAD_LOCAL_INCREMENT_IN_RETURN">DLS: return 文に無駄なインクリメントがある (DL
S_DEAD_LOCAL_INCREMENT_IN_RETURN)</a></h3> |
1544 | 1614 |
1545 | 1615 |
1546 <p> | 1616 <p> |
1547 ラップされたプリミティブ値は、3項演算子 (<code> b ? e1 : e2</code>) の評価の一部として、別のプリミティブ型にアンボクシングされて変
換されます。 | |
1548 Java 言語仕様では、<code>e1</code> と <code>e2</code> がラップされた数値なら値はアンボクシングされ、共通の型へと変換/型変
換されます | |
1549 (たとえば、<code>e1</code> が <code>Integer</code> で、<code>e2</code> が <code>Float</co
de> なら <code>e1</code> はアンボクシング (<code>int</code> に変換) され、<code>float</code> に変換
され、ボクシング (<code>Float</code> に変換) されます)。 | |
1550 JLS セクション15.25を参照してください。 | |
1551 </p> | |
1552 | |
1553 | |
1554 <h3><a name="CO_COMPARETO_RESULTS_MIN_VALUE">Co: compareTo()/compare() は Integer
.MIN_VALUE を返す (CO_COMPARETO_RESULTS_MIN_VALUE)</a></h3> | |
1555 | |
1556 | |
1557 <p> | |
1558 いくつかの状況下では、この <code>compareTo</code> または <code>compare</code> メソッドは Integer.MIN_
VALUE を返します。それは、非常に間違ったプラクティスです。 | |
1559 <code>compareTo</code> メソッドの戻り値で重要なことは結果の符号だけです。 | |
1560 しかし、結果の符号を無効にすることを期待して、<code>compareTo</code> メソッドの戻り値を無効にすることがあります。 | |
1561 戻り値が Integer.MIN_VALUE である場合を除き、Integer.MIN_VALUE よりも-1を返します。 | |
1562 </p> | |
1563 | |
1564 | |
1565 <h3><a name="DLS_DEAD_LOCAL_INCREMENT_IN_RETURN">DLS: return 文に役に立たないインクリメントがある
(DLS_DEAD_LOCAL_INCREMENT_IN_RETURN)</a></h3> | |
1566 | |
1567 | |
1568 <p> | |
1569 <code>return x++;</code> のような return 文があります。 | 1617 <code>return x++;</code> のような return 文があります。 |
1570 接頭辞インクリメント/デクリメントは 式の値に影響を与えないので、インクリメント/デクリメントは効果がありません。 | 1618 接頭辞インクリメント/デクリメントは 式の値に影響を与えないので、インクリメント/デクリメントは効果がありません。 |
1571 この文が正しいのか確かめてください。 | 1619 この文が正しいのか確かめてください。 |
1572 </p> | 1620 </p> |
1573 | 1621 |
1574 | 1622 |
1575 <h3><a name="DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: クラスリテラルの無効な代入 (DLS_DEAD_STORE
_OF_CLASS_LITERAL)</a></h3> | 1623 <h3><a name="DLS_DEAD_STORE_OF_CLASS_LITERAL">DLS: クラスリテラルの無効な代入 (DLS_DEAD_STORE
_OF_CLASS_LITERAL)</a></h3> |
1576 | 1624 |
1577 | 1625 |
1578 <p> | 1626 <p> |
1579 この命令は変数にクラスリテラルを代入していますが、決して使われません。<br> | 1627 この命令は変数にクラスリテラルを代入していますが、決して使われません。<br> |
1580 <a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">The behavior of t
his differs in Java 1.4 and in Java 5</a><br> | 1628 <a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">The behavior of t
his differs in Java 1.4 and in Java 5</a><br> |
1581 J2SE 1.4 およびそれ以前のバージョンでは、<code>Foo.class</code> への参照は <code>Foo</code> のためのスタティッ
クイニシャライザがすでに実行されていないなら実行することを強制します。 | 1629 J2SE 1.4 およびそれ以前のバージョンでは、<code>Foo.class</code> への参照は <code>Foo</code> のためのスタティッ
クイニシャライザが既に実行されていないなら実行することを強制します。 |
1582 J2SE 5.0 ではそうしません。 | 1630 J2SE 5.0 ではそうしません。 |
1583 </p> | 1631 </p> |
1584 <p> | 1632 <p> |
1585 より多くの詳細と例と J2SE 5.0 のクラスの強制的な初期化の方法の提案は Sun の <a href="//java.sun.com/j2se/1.5.0
/compatibility.html#literal">article on Java SE compatibility</a> を参照してください。 | 1633 より多くの詳細と例と J2SE 5.0 のクラスの強制的な初期化の方法の提案は Sun の <a href="//java.sun.com/j2se/1.5.0
/compatibility.html#literal">article on Java SE compatibility</a> を参照してください。 |
1586 </p> | 1634 </p> |
1587 | 1635 |
1588 | 1636 |
1589 <h3><a name="DLS_OVERWRITTEN_INCREMENT">DLS: 上書きされたインクリメント (DLS_OVERWRITTEN_INCR
EMENT)</a></h3> | 1637 <h3><a name="DLS_OVERWRITTEN_INCREMENT">DLS: 上書きされたインクリメント (DLS_OVERWRITTEN_INCR
EMENT)</a></h3> |
1590 | 1638 |
1591 | 1639 |
(...skipping 18 matching lines...) Expand all Loading... |
1610 <p> | 1658 <p> |
1611 このコードは、メソッドに0から11の範囲外の月定数値を渡しています。 | 1659 このコードは、メソッドに0から11の範囲外の月定数値を渡しています。 |
1612 </p> | 1660 </p> |
1613 | 1661 |
1614 | 1662 |
1615 <h3><a name="DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE">DMI: 正確に表されない double から構築され
た BigDecimal (DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE)</a></h3> | 1663 <h3><a name="DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE">DMI: 正確に表されない double から構築され
た BigDecimal (DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE)</a></h3> |
1616 | 1664 |
1617 | 1665 |
1618 <p> | 1666 <p> |
1619 このコードは、10進数の数にうまく変換されない double 値から BigDecimal を作成しています。 | 1667 このコードは、10進数の数にうまく変換されない double 値から BigDecimal を作成しています。 |
1620 たとえば、Java で <code>new BigDecimal(0.1)</code> と書くと、0.1と正確に等しい BigDecimal (スケールが1で
スケールなしの値が1) が作成されると思うかもしれませんが | 1668 たとえば、Java で <code>new BigDecimal(0.1)</code> と書くと、0.1と正確に等しい BigDecimal (スケールが1で
スケールなしの値が1) が作成されると思うかもしれませんが、 |
1621 実際には0.1000000000000000055511151231257827021181583404541015625と等しくなります。 | 1669 実際には0.1000000000000000055511151231257827021181583404541015625と等しくなります。 |
1622 </p> | 1670 </p> |
1623 <p> | 1671 <p> |
1624 おそらく <code>BigDecimal.valueOf(double d)</code> メソッドの使用が望ましいです。BigDecimal(たとえば、<c
ode>BigDecimal.valueOf(0.1)</code> は0.1を与えます) を作成するためには double の文字列表現を使用します。 | 1672 おそらく <code>BigDecimal.valueOf(double d)</code> メソッドの使用が望ましいです。BigDecimal(たとえば、<c
ode>BigDecimal.valueOf(0.1)</code> は0.1を与えます) を作成するためには double の文字列表現を使用します。 |
1625 </p> | 1673 </p> |
1626 | 1674 |
1627 | 1675 |
1628 <h3><a name="DMI_CALLING_NEXT_FROM_HASNEXT">DMI: hasNext メソッドで next メソッドを呼び出している
(DMI_CALLING_NEXT_FROM_HASNEXT)</a></h3> | 1676 <h3><a name="DMI_CALLING_NEXT_FROM_HASNEXT">DMI: hasNext メソッドで next メソッドを呼び出している
(DMI_CALLING_NEXT_FROM_HASNEXT)</a></h3> |
1629 | 1677 |
1630 | 1678 |
1631 <p> | 1679 <p> |
1632 <code>hasNext</code> メソッドは、<code>next</code> メソッドを呼び出しています。 | 1680 <code>hasNext</code> メソッドは、<code>next</code> メソッドを呼び出しています。 |
1633 <code>hasNext</code> メソッドは、イテレータの状態を変更することになっていないので、ほぼ確実に間違っています。 | 1681 <code>hasNext</code> メソッドは、イテレータの状態を変更することになっていないので、ほぼ確実に間違っています。 |
1634 <code>next</code> メソッドがイテレータの状態を変更することになっています。 | 1682 <code>next</code> メソッドがイテレータの状態を変更することになっています。 |
1635 </p> | 1683 </p> |
1636 | 1684 |
1637 | 1685 |
1638 <h3><a name="DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES">DMI: コレクションは自分自身を含める
べきではない (DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES)</a></h3> | 1686 <h3><a name="DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES">DMI: コレクションは自分自身を含める
べきではない (DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES)</a></h3> |
1639 | 1687 |
1640 | 1688 |
1641 <p> | 1689 <p> |
1642 この総称型コレクションメソッドへの呼び出しはコレクションに自分自身が含まれている (たとえば、<code>s.contains(s)</code> が true
だとして) 場合にだけ意味があります。 | 1690 この総称型コレクションメソッドへの呼び出しはコレクションに自分自身が含まれている場合 (たとえば、<code>s.contains(s)</code> が tr
ue) にだけ意味があります。 |
1643 これは true である可能性が低くて、もし true なら問題の原因になります (たとえば、無限再帰になっているハッシュコードの計算)。 | 1691 これが本当だとは思えないし、もし本当なら問題の原因になります (たとえば、無限再帰になっているハッシュコードの計算)。 |
1644 間違ったパラメータが渡されている可能性が高いです。 | 1692 間違ったパラメータが渡されている可能性が高いです。 |
1645 </p> | 1693 </p> |
1646 | 1694 |
1647 | 1695 |
1648 <h3><a name="DMI_DOH">DMI: D'oh! 無意味なメソッド呼び出し (DMI_DOH)</a></h3> | 1696 <h3><a name="DMI_DOH">DMI: D'oh! 無意味なメソッド呼び出し (DMI_DOH)</a></h3> |
1649 | 1697 |
1650 | 1698 |
1651 <p> | 1699 <p> |
1652 この部分的なメソッド呼び出しは、検査から明らかな理由で意味がありません。 | 1700 この部分的なメソッド呼び出しは、検査から明らかな理由で意味がありません。 |
1653 </p> | 1701 </p> |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1687 | 1735 |
1688 <p> | 1736 <p> |
1689 アノテーションは、<code>@Retention(RetentionPolicy.RUNTIME)</code> でアノテートされなければ、リフレクション (
たとえば、<code>isAnnotationPresent(...)</code> メソッド) を使用して観測することができません。 | 1737 アノテーションは、<code>@Retention(RetentionPolicy.RUNTIME)</code> でアノテートされなければ、リフレクション (
たとえば、<code>isAnnotationPresent(...)</code> メソッド) を使用して観測することができません。 |
1690 </p> | 1738 </p> |
1691 | 1739 |
1692 | 1740 |
1693 <h3><a name="DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_
EXECUTOR">Dm: ScheduledThreadPoolExecutor の最大プールサイズを変えようとする無駄な試み (DMI_FUTILE_ATT
EMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_EXECUTOR)</a></h3> | 1741 <h3><a name="DMI_FUTILE_ATTEMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_
EXECUTOR">Dm: ScheduledThreadPoolExecutor の最大プールサイズを変えようとする無駄な試み (DMI_FUTILE_ATT
EMPT_TO_CHANGE_MAXPOOL_SIZE_OF_SCHEDULED_THREAD_POOL_EXECUTOR)</a></h3> |
1694 | 1742 |
1695 | 1743 |
1696 <p> | 1744 <p> |
1697 <code>ScheduledThreadPoolExecutor</code> は <code>ThreadPoolExecutor</code> から継承さ
れますが継承されたチューニングメソッドの一部は有効ではありません。 | 1745 <code>ScheduledThreadPoolExecutor</code> は <code>ThreadPoolExecutor</code> から継承さ
れますが継承されたチューニングメソッドの一部は有用ではありません。 |
1698 特に、corePoolSize スレッドとアンバウンド形式のキューを使用する固定サイズプールとして動作するので、maximumPoolSize の調整は有効な効
果がありません。<br> | 1746 特に、corePoolSize スレッドとアンバウンド形式のキューを使用する固定サイズプールとして動作するので、maximumPoolSize の調整は有用な効
果がありません。<br> |
1699 (<a href="http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/Sched
uledThreadPoolExecutor.html">Javadoc</a>) | 1747 (<a href="http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/Sched
uledThreadPoolExecutor.html">Javadoc</a>) |
1700 </p> | 1748 </p> |
1701 | 1749 |
1702 | 1750 |
1703 <h3><a name="DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO_CORE_THREADS">Dm: コアプー
ルサイズが0の ScheduledThreadPoolExecutor の作成 (DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH
_ZERO_CORE_THREADS)</a></h3> | 1751 <h3><a name="DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH_ZERO_CORE_THREADS">Dm: コアプー
ルサイズが0の ScheduledThreadPoolExecutor の作成 (DMI_SCHEDULED_THREAD_POOL_EXECUTOR_WITH
_ZERO_CORE_THREADS)</a></h3> |
1704 | 1752 |
1705 | 1753 |
1706 <p> | 1754 <p> |
1707 コアプールサイズが0の <code>ScheduledThreadPoolExecutor</code> は決して何も実行しません。 | 1755 コアプールサイズが0の <code>ScheduledThreadPoolExecutor</code> は決して何も実行しません。 |
1708 最大プールサイズへの変更は無視されます。<br> | 1756 最大プールサイズへの変更は無視されます。<br> |
1709 (<a href="http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/Sched
uledThreadPoolExecutor.html#ScheduledThreadPoolExecutor(int)">Javadoc</a>) | 1757 (<a href="http://java.sun.com/javase/ja/6/docs/ja/api/java/util/concurrent/Sched
uledThreadPoolExecutor.html#ScheduledThreadPoolExecutor(int)">Javadoc</a>) |
1710 </p> | 1758 </p> |
1711 | 1759 |
1712 | 1760 |
1713 <h3><a name="DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD">Dm: EasyMock メソッドへの役に立たない/無意味な
呼び出し (DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD)</a></h3> | 1761 <h3><a name="DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD">Dm: EasyMock メソッドへの役に立たない/無意味な
呼び出し (DMI_VACUOUS_CALL_TO_EASYMOCK_METHOD)</a></h3> |
1714 | 1762 |
1715 | 1763 |
1716 <p> | 1764 <p> |
1717 この呼び出しは EasyMock メソッドにどんなオブジェクトも渡さないので何もしません。 | 1765 この呼び出しは EasyMock メソッドにどんなオブジェクトも渡さないので何もしません。 |
1718 </p> | 1766 </p> |
1719 | 1767 |
1720 | 1768 |
| 1769 <h3><a name="DM_INVALID_MIN_MAX">Dm: Math.max と Math.min の間違った組み合わせ (DM_INVALID_
MIN_MAX)</a></h3> |
| 1770 |
| 1771 |
| 1772 <p> |
| 1773 このコードは、<code>Math.min(0, Math.max(100, value))</code> のような構文を使用して境界値を制限しようとしています
。 |
| 1774 しかしながら、定数の順序が間違っています。 <code>Math.min(100, Math.max(0, value))</code> とすべきです。 |
| 1775 結果としてこのコードは常に同じ結果 (もし値が NaN なら NaN) を作り出します。 |
| 1776 </p> |
| 1777 |
| 1778 |
1721 <h3><a name="EC_ARRAY_AND_NONARRAY">EC: equals メソッドを使用して配列と非配列を比較している (EC_ARRAY_
AND_NONARRAY)</a></h3> | 1779 <h3><a name="EC_ARRAY_AND_NONARRAY">EC: equals メソッドを使用して配列と非配列を比較している (EC_ARRAY_
AND_NONARRAY)</a></h3> |
1722 | 1780 |
1723 | 1781 |
1724 <p> | 1782 <p> |
1725 このメソッドは、配列と配列であると思われない参照を比較するために <code>.equals(Object o)</code> を呼び出しています。 | 1783 このメソッドは、配列と配列だと思われない参照を比較するために <code>.equals(Object o)</code> を呼び出しています。 |
1726 比較されているものが違う型なら不等であることが保証されているので、比較はほぼ間違いなく誤りです。 | 1784 比較されているものが違う型なら等しくないことであることが保証されているので、比較はほぼ間違いなく誤りです。 |
1727 たとえそれらが両方とも配列であるとしても、配列の <code>equals</code> メソッドは2つの配列が同じオブジェクトであると決定するだけです。 | 1785 たとえそれらが両方とも配列だったとしても、配列の <code>equals</code> メソッドは2つの配列が同じオブジェクトだと決定するだけです。 |
1728 配列のコンテンツを比較するためには <code>java.util.Arrays.equals(Object[], Object[])</code> を使用して
ください。 | 1786 配列のコンテンツを比較するためには <code>java.util.Arrays.equals(Object[], Object[])</code> を使用して
ください。 |
1729 </p> | 1787 </p> |
1730 | 1788 |
1731 | 1789 |
1732 <h3><a name="EC_BAD_ARRAY_COMPARE">EC: 配列の equals メソッド呼び出しは == と等価である (EC_BAD_AR
RAY_COMPARE)</a></h3> | 1790 <h3><a name="EC_BAD_ARRAY_COMPARE">EC: 配列の equals メソッド呼び出しは == と等価である (EC_BAD_AR
RAY_COMPARE)</a></h3> |
1733 | 1791 |
1734 | 1792 |
1735 <p> | 1793 <p> |
1736 このメソッドは、配列で <code>.equals(Object o)</code> を呼び出しています。 | 1794 このメソッドは、配列で <code>.equals(Object o)</code> を呼び出しています。 |
1737 配列は、<code>Object</code> の <code>equals</code> メソッドをオーバーライドしないので、配列で <code>equals
</code> メソッドを呼び出すことはアドレスを比較することと同じです。 | 1795 配列は、<code>Object</code> の <code>equals</code> メソッドをオーバーライドしないので、配列で <code>equals
</code> メソッドを呼び出すことはアドレスを比較することと同じです。 |
1738 配列のコンテンツを比較するためには <code>java.util.Arrays.equals(Object[], Object[])</code> を使用して
ください。 | 1796 配列のコンテンツを比較するためには <code>java.util.Arrays.equals(Object[], Object[])</code> を使用して
ください。 |
1739 配列のアドレスを比較するために、明示的に、<code>==</code> を使用して参照等価性をチェックすることは、それほど紛らわしくないでしょう。 | 1797 配列のアドレスを比較するために明示的に <code>==</code> を使用して参照等価性をチェックすることは、それほど紛らわしくないでしょう。 |
1740 </p> | 1798 </p> |
1741 | 1799 |
1742 | 1800 |
1743 <h3><a name="EC_INCOMPATIBLE_ARRAY_COMPARE">EC: equals(...) メソッドを使用して互換性のない配列を比較
している (EC_INCOMPATIBLE_ARRAY_COMPARE)</a></h3> | 1801 <h3><a name="EC_INCOMPATIBLE_ARRAY_COMPARE">EC: equals(...) メソッドを使用して互換性のない配列を比較
している (EC_INCOMPATIBLE_ARRAY_COMPARE)</a></h3> |
1744 | 1802 |
1745 | 1803 |
1746 <p> | 1804 <p> |
1747 このメソッドは、互換性のない型の配列を比較するために <code>.equals(Object o)</code> を呼び出しています (たとえば、<code>
String[]</code> と <code>StringBuffer[]</code>、<code>String[]</code> と <code>int[
]</code>) 。 | 1805 このメソッドは、互換性のない型の配列を比較するために <code>.equals(Object o)</code> を呼び出しています (たとえば、<code>
String[]</code> と <code>StringBuffer[]</code>、<code>String[]</code> と <code>int[
]</code>) 。 |
1748 それらは、決して等価ではありません。 | 1806 それらは、決して等価ではありません。 |
1749 さらに、<code>equals(...)</code> が配列を比較するのに使用されるとき、それらが同じ配列であるかどうか確かめるだけで、配列のコンテンツは無
視します。 | 1807 さらに、<code>equals(...)</code> が配列を比較するのに使用されるとき、それらが同じ配列であるかどうか確かめるだけで、配列のコンテンツは無
視します。 |
1750 </p> | 1808 </p> |
1751 | 1809 |
1752 | 1810 |
1753 <h3><a name="EC_NULL_ARG">EC: equals(null) の呼び出し (EC_NULL_ARG)</a></h3> | 1811 <h3><a name="EC_NULL_ARG">EC: equals(null) の呼び出し (EC_NULL_ARG)</a></h3> |
1754 | 1812 |
1755 | 1813 |
1756 <p> | 1814 <p> |
1757 このメソッドは、 null 値の引数を渡して <code>equals(Object)</code> を呼び出しています。 | 1815 このメソッドは、 null 値の引数を渡して <code>equals(Object)</code> を呼び出しています。 |
1758 <code>equals</code> メソッドの規約によると、この呼び出しは常に false を返すはずです。 | 1816 <code>equals</code> メソッドの規約によると、この呼び出しは常に false を返すはずです。 |
1759 </p> | 1817 </p> |
1760 | 1818 |
1761 | 1819 |
1762 <h3><a name="EC_UNRELATED_CLASS_AND_INTERFACE">EC: equals メソッドを呼び出して無関係のクラスとインタフ
ェースを比較している (EC_UNRELATED_CLASS_AND_INTERFACE)</a></h3> | 1820 <h3><a name="EC_UNRELATED_CLASS_AND_INTERFACE">EC: equals メソッドを呼び出して無関係のクラスとインタフ
ェースを比較している (EC_UNRELATED_CLASS_AND_INTERFACE)</a></h3> |
1763 | 1821 |
1764 | 1822 |
1765 <p> | 1823 <p> |
1766 このメソッドは、一方がクラスで他方がインタフェースである2つの参照で <code>equals(Object)</code> メソッドを呼び出しています。 | 1824 このメソッドは、一方がクラスで他方がインタフェースである2つの参照で <code>equals(Object)</code> メソッドを呼び出しています。 |
1767 クラスは、そのクラスの非抽象サブクラスも含めてインタフェースを実装していません。 | 1825 クラスは、そのクラスの非抽象サブクラスも含めてインタフェースを実装していません。 |
1768 したがって比較されている2つのオブジェクトは実行時に同じクラスのメンバである可能性が低いです (いくつかのアプリケーションクラスが解析できなかったか、動的クラス
ローディングが実行時に起こることができた場合を除く)。 | 1826 したがって比較されている2つのオブジェクトは実行時に同じクラスのメンバである可能性が低いです (いくつかのアプリケーションクラスが解析できなかったか、動的クラス
ローディングが実行時に起こることができた場合を除く)。 |
1769 <code>equals</code> メソッドの規約によると、異なるクラスのオブジェクトは常に不等として比較するべきです。 | 1827 <code>equals</code> メソッドの規約によると、異なるクラスのオブジェクトは常に等しくないとして比較するべきです。 |
1770 したがって、<code>java.lang.Object.equals(Object)</code> によって定義される規約によれば、この比較の結果は実行時に常
に false になります。 | 1828 したがって、<code>java.lang.Object.equals(Object)</code> によって定義される規約によれば、この比較の結果は実行時に常
に false になります。 |
1771 </p> | 1829 </p> |
1772 | 1830 |
1773 | 1831 |
1774 <h3><a name="EC_UNRELATED_INTERFACES">EC: equals メソッドを呼び出して異なる型のインタフェースを比較している (
EC_UNRELATED_INTERFACES)</a></h3> | 1832 <h3><a name="EC_UNRELATED_INTERFACES">EC: equals メソッドを呼び出して異なる型のインタフェースを比較している (
EC_UNRELATED_INTERFACES)</a></h3> |
1775 | 1833 |
1776 | 1834 |
1777 <p> | 1835 <p> |
1778 このメソッドは、どちらも他方のサブタイプでない無関係なインタフェース型の2つの参照で <code>equals(Object)</code> メソッドを呼び出し
ています。 | 1836 このメソッドは、どちらも他方のサブタイプでない無関係なインタフェース型の2つの参照で <code>equals(Object)</code> メソッドを呼び出し
ています。 |
1779 そして、両方のインタフェースを実装する既知の非抽象クラスがありません。 | 1837 そして、両方のインタフェースを実装する既知の非抽象クラスがありません。 |
1780 したがって比較されている2つのオブジェクトは実行時に同じクラスのメンバである可能性が低いです (いくつかのアプリケーションクラスが解析できなかったか、動的クラス
ローディングが実行時に起こることができた場合を除く)。 | 1838 したがって比較されている2つのオブジェクトは実行時に同じクラスのメンバである可能性が低いです (いくつかのアプリケーションクラスが解析できなかったか、動的クラス
ローディングが実行時に起こることができた場合を除く)。 |
1781 <code>equals</code> メソッドの規約によると、異なるクラスのオブジェクトは常に不等として比較するべきです。 | 1839 <code>equals</code> メソッドの規約によると、異なるクラスのオブジェクトは常に等しくないとして比較するべきです。 |
1782 したがって、<code>java.lang.Object.equals(Object)</code> によって定義される規約によれば、この比較の結果は実行時に常
に false になります。 | 1840 したがって、<code>java.lang.Object.equals(Object)</code> によって定義される規約によれば、この比較の結果は実行時に常
に false になります。 |
1783 </p> | 1841 </p> |
1784 | 1842 |
1785 | 1843 |
1786 <h3><a name="EC_UNRELATED_TYPES">EC: equals メソッドを呼び出して異なる型を比較している (EC_UNRELATED_
TYPES)</a></h3> | 1844 <h3><a name="EC_UNRELATED_TYPES">EC: equals メソッドを呼び出して異なる型を比較している (EC_UNRELATED_
TYPES)</a></h3> |
1787 | 1845 |
1788 | 1846 |
1789 <p> | 1847 <p> |
1790 このメソッドは、共通のサブクラスがない異なるクラス型の2つのオブジェクト参照で <code>equals(Object)</code> メソッドを呼び出していま
す。 | 1848 このメソッドは、異なるクラス型の2つの参照で <code>equals(Object)</code> メソッドを呼び出していて、解析が実行時に異なるクラスのオ
ブジェクトになることを示唆しています。 |
1791 したがって比較されている2つのオブジェクトは実行時に同じクラスのメンバである可能性が低いです (いくつかのアプリケーションクラスが解析できなかったか、動的クラス
ローディングが実行時に起こることができた場合を除く)。 | 1849 さらに、呼び出されるであろう equals メソッドの検査では、この呼び出しは常に false を返すか、 |
1792 <code>equals</code> メソッドの規約によると、異なるクラスのオブジェクトは常に不等として比較するべきです。 | 1850 あるいは equals メソッドが対称 (Object クラスの equals のための契約に必要な性質) ではないことのどちらかを示唆しています。 |
1793 したがって、<code>java.lang.Object.equals(Object)</code> によって定義される規約によれば、この比較の結果は実行時に常
に false になります。 | |
1794 </p> | 1851 </p> |
1795 | 1852 |
1796 | 1853 |
1797 <h3><a name="EC_UNRELATED_TYPES_USING_POINTER_EQUALITY">EC: 参照等価性を使用して異なる型を比較してい
る (EC_UNRELATED_TYPES_USING_POINTER_EQUALITY)</a></h3> | 1854 <h3><a name="EC_UNRELATED_TYPES_USING_POINTER_EQUALITY">EC: 参照等価性を使用して異なる型を比較してい
る (EC_UNRELATED_TYPES_USING_POINTER_EQUALITY)</a></h3> |
1798 | 1855 |
1799 | 1856 |
1800 <p> | 1857 <p> |
1801 このメソッドは異なる型と思われる2つの参照を比較するために参照等価性を使用しています。 | 1858 このメソッドは異なる型と思われる2つの参照を比較するために参照等価性を使用しています。 |
1802 この比較の結果は、常に false です。 | 1859 この比較の結果は、常に false です。 |
1803 </p> | 1860 </p> |
1804 | 1861 |
1805 | 1862 |
1806 <h3><a name="EQ_ALWAYS_FALSE">Eq: equals メソッドは常に false を戻す (EQ_ALWAYS_FALSE)</a>
</h3> | 1863 <h3><a name="EQ_ALWAYS_FALSE">Eq: equals メソッドは常に false を戻す (EQ_ALWAYS_FALSE)</a>
</h3> |
1807 | 1864 |
1808 | 1865 |
1809 <p> | 1866 <p> |
1810 このクラスでは、常に false を返す <code>equlas</code> メソッドを定義しています。 | 1867 このクラスでは、常に false を返す <code>equlas</code> メソッドを定義しています。 |
1811 これは、オブジェクトがそれ自身と等価ではないことを意味していて、このクラスの有効な Map や Set を作成できません。 | 1868 これはオブジェクトがそれ自身と等価ではないことを意味していて、このクラスの有用な Map や Set を作成できません。 |
1812 より根本的に、<code>equals</code> メソッドの要件の一つである反射性を満たしていないことになります。 | 1869 より根本的に、<code>equals</code> メソッドの要件の一つである反射性を満たしていないことになります。 |
1813 </p> | 1870 </p> |
1814 <p> | 1871 <p> |
1815 おそらく意図されたことは、オブジェクトはそれ自身と等価であるというオブジェクト同一性です。 | 1872 おそらく意図されたことは、オブジェクトはそれ自身と等価であるというオブジェクト同一性です。 |
1816 これは <code>Object</code> クラスから継承される振る舞いです。 | 1873 これは <code>Object</code> クラスから継承される振る舞いです。 |
1817 異なるスーパークラスから継承される <code>equals</code> メソッドをオーバーライドする必要があるなら以下のようなコードが使えます。 | 1874 異なるスーパークラスから継承される <code>equals</code> メソッドをオーバーライドする必要があるなら以下のようなコードが使えます。 |
1818 </p> | 1875 </p> |
1819 <blockquote><pre> | 1876 <blockquote><pre> |
1820 public boolean equals(Object o) { | 1877 public boolean equals(Object o) { |
1821 return this == o; | 1878 return this == o; |
(...skipping 18 matching lines...) Expand all Loading... |
1840 異なるクラスローダによってロードされたクラスなら、同じ名前で異なるクラスがある可能性があります。 | 1897 異なるクラスローダによってロードされたクラスなら、同じ名前で異なるクラスがある可能性があります。 |
1841 クラスオブジェクトが同じなのか確かめてください。 | 1898 クラスオブジェクトが同じなのか確かめてください。 |
1842 </p> | 1899 </p> |
1843 | 1900 |
1844 | 1901 |
1845 <h3><a name="EQ_DONT_DEFINE_EQUALS_FOR_ENUM">Eq: 列挙型は共変な equals メソッドを定義している (EQ_
DONT_DEFINE_EQUALS_FOR_ENUM)</a></h3> | 1902 <h3><a name="EQ_DONT_DEFINE_EQUALS_FOR_ENUM">Eq: 列挙型は共変な equals メソッドを定義している (EQ_
DONT_DEFINE_EQUALS_FOR_ENUM)</a></h3> |
1846 | 1903 |
1847 | 1904 |
1848 <p> | 1905 <p> |
1849 このクラスは列挙を定義していて、列挙の等価性はオブジェクト同一性を使用して定義されています。 | 1906 このクラスは列挙を定義していて、列挙の等価性はオブジェクト同一性を使用して定義されています。 |
1850 列挙値のために共変な <code>equals</code> メソッドを定義することは、非常に間違ったプラクティスです。 | 1907 列挙値のために共変な <code>equals</code> メソッドを定義することは、ひどいバッドプラクティスです。 |
1851 2つの異なる列挙値が一般にの <code>equals</code> メソッドでは「等価ではない」と判定され、共変な <code>equals</code> メ
ソッドでは「等価」と判定されるからです。 | 1908 2つの異なる列挙値が <code>equals</code> メソッドでは「等価ではない」と判定され、共変な <code>equals</code> メソッドで
は「等価」と判定されるからです。 |
1852 共変な <code>equals</code> メソッドを定義しないでください。 | 1909 共変な <code>equals</code> メソッドを定義しないでください。 |
1853 </p> | 1910 </p> |
1854 | 1911 |
1855 | 1912 |
1856 <h3><a name="EQ_OTHER_NO_OBJECT">Eq: equals(Object) メソッドをオーバーライドしていない equals メソッ
ドの定義 (EQ_OTHER_NO_OBJECT)</a></h3> | 1913 <h3><a name="EQ_OTHER_NO_OBJECT">Eq: equals(Object) メソッドをオーバーライドしていない equals メソッ
ドの定義 (EQ_OTHER_NO_OBJECT)</a></h3> |
1857 | 1914 |
1858 | 1915 |
1859 <p> | 1916 <p> |
1860 このクラスは、<code>equals</code> メソッドを定義していますが、<code>java.lang.Object</code> クラスの <cod
e>equals(Object)</code> メソッドをオーバーライドしていません。 | 1917 このクラスは、<code>equals</code> メソッドを定義していますが、<code>java.lang.Object</code> クラスの <cod
e>equals(Object)</code> メソッドをオーバーライドしていません。 |
1861 その代わりに、スーパークラスから <code>equals(Object)</code> メソッドを継承して、<code>boolean equals(Obje
ct)</code> メソッドを定義するべきです。 | 1918 その代わりに、スーパークラスから <code>equals(Object)</code> メソッドを継承して、<code>boolean equals(Obje
ct)</code> メソッドを定義するべきです。 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1893 </p> | 1950 </p> |
1894 | 1951 |
1895 | 1952 |
1896 <h3><a name="FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER">FE: NaN への等価性のための絶望的なテスト (FE_TEST
_IF_EQUAL_TO_NOT_A_NUMBER)</a></h3> | 1953 <h3><a name="FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER">FE: NaN への等価性のための絶望的なテスト (FE_TEST
_IF_EQUAL_TO_NOT_A_NUMBER)</a></h3> |
1897 | 1954 |
1898 | 1955 |
1899 <p> | 1956 <p> |
1900 このコードは、浮動小数点が特別な非数値と等価であるか確かめています (たとえば <code>if (x == Double.NaN)</code>)。 | 1957 このコードは、浮動小数点が特別な非数値と等価であるか確かめています (たとえば <code>if (x == Double.NaN)</code>)。 |
1901 しかしながら、<code>NaN</code> の特別な意味のため、値は <code>NaN</code> と等価ではありません。 | 1958 しかしながら、<code>NaN</code> の特別な意味のため、値は <code>NaN</code> と等価ではありません。 |
1902 したがって、<code>x == Double.NaN</code> は常に false と評価します。 | 1959 したがって、<code>x == Double.NaN</code> は常に false と評価します。 |
1903 <code>x</code> という値が特別な非数値であるかどうか確かめるためには <code>Double.isNaN(x)</code> を使用します (あ
るいは <code>x</code> が浮動小数点精度であるなら <code>Float.isNaN(x)</code>)。 | 1960 <code>x</code> という値が特別な非数値であるかどうか確かめるためには <code>Double.isNaN(x)</code> を使用します (ま
たは <code>x</code> が浮動小数点精度であるなら <code>Float.isNaN(x)</code>)。 |
1904 </p> | 1961 </p> |
1905 | 1962 |
1906 | 1963 |
1907 <h3><a name="VA_FORMAT_STRING_BAD_ARGUMENT">FS: 書式指示子へ渡している引数に互換性がない (VA_FORMAT_
STRING_BAD_ARGUMENT)</a></h3> | 1964 <h3><a name="VA_FORMAT_STRING_BAD_ARGUMENT">FS: 書式指示子へ渡している引数に互換性がない (VA_FORMAT_
STRING_BAD_ARGUMENT)</a></h3> |
1908 | 1965 |
1909 | 1966 |
1910 <p> | 1967 <p> |
1911 書式指示子は、対応する引数と互換性がありません。 | 1968 書式指示子は、対応する引数と互換性がありません。 |
1912 たとえば、<code>System.out.println("%d\n", "hello");</code> の %d 書式指示子は数値の引数を必要としますが数
値ではなく文字列が渡されています。 | 1969 たとえば、<code>System.out.println("%d\n", "hello");</code> の %d 書式指示子は数値の引数を必要としますが数
値ではなく文字列が渡されています。 |
1913 この文が実行されると実行時例外が発生します。 | 1970 この文が実行されると実行時例外が発生します。 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1969 </p> | 2026 </p> |
1970 | 2027 |
1971 | 2028 |
1972 <h3><a name="GC_UNRELATED_TYPES">GC: 型パラメータとメソッド引数に関係がない (GC_UNRELATED_TYPES)</a
></h3> | 2029 <h3><a name="GC_UNRELATED_TYPES">GC: 型パラメータとメソッド引数に関係がない (GC_UNRELATED_TYPES)</a
></h3> |
1973 | 2030 |
1974 | 2031 |
1975 <p> | 2032 <p> |
1976 総称型コレクションメソッドへの呼び出しにコレクションのパラメータとは互換性のないクラスの引数があります (すなわち、引数の型は総称型引数に対応するスーパタイプで
もサブタイプでもありません)。 | 2033 総称型コレクションメソッドへの呼び出しにコレクションのパラメータとは互換性のないクラスの引数があります (すなわち、引数の型は総称型引数に対応するスーパタイプで
もサブタイプでもありません)。 |
1977 したがって、コレクションにはここで使用されたメソッド引数と等価であるどんなオブジェクトも含まれていません。 | 2034 したがって、コレクションにはここで使用されたメソッド引数と等価であるどんなオブジェクトも含まれていません。 |
1978 多分間違った値がメソッドに渡されています。 | 2035 多分間違った値がメソッドに渡されています。 |
1979 一般に、2つの無関係なクラスのインスタンスは等価ではありません。 | 2036 一般的に2つの無関係なクラスのインスタンスは等価ではありません。 |
1980 たとえば、<code>Foo</code> と <code>Bar</code> クラスがサブタイプによって関係がないなら、<code>Foo</code> の
インスタンスは <code>Bar</code> のインスタンスと等価のはずがありません。 | 2037 たとえば、<code>Foo</code> と <code>Bar</code> クラスがサブタイプによって関係がないなら、<code>Foo</code> の
インスタンスは <code>Bar</code> のインスタンスと等価のはずがありません。 |
1981 その他の問題で対称的ではない <code>equals</code> メソッドになる可能性が高いです。 | 2038 その他の問題で対称的ではない <code>equals</code> メソッドになる可能性が高いです。 |
1982 たとえば、<code>Foo</code> が <code>String</code> と等価であるように <code>Foo</code> クラスを定義するな
ら、<code>String</code> は <code>String</code> だけと等価であるので、<code>equals</code> メソッドは
対称的ではありません。 | 2039 たとえば、<code>Foo</code> が <code>String</code> と等価であるように <code>Foo</code> クラスを定義するな
ら、<code>String</code> は <code>String</code> だけと等価であるので、<code>equals</code> メソッドは
対称的ではありません。 |
1983 </p> | 2040 </p> |
1984 <p> | 2041 <p> |
1985 まれに、非対称 <code>equals</code> メソッドを定義して、まだ、何とかそれらのコードを機能させています。 | 2042 まれに、非対称 <code>equals</code> メソッドを定義して、まだ、何とかそれらのコードを機能させています。 |
1986 APIのどれも文書化していないか、保証もしていないが、<code>Collection<String></code> に <code>Foo</co
de> があるかどうか調べたいなら、 | 2043 APIのどれも文書化していないか、保証もしていないが、<code>Collection<String></code> に <code>Foo</co
de> があるかどうか調べたいなら、 |
1987 引数の <code>equals</code> メソッド (たとえば、<code>Foo</code>クラスの <code>equals</code> メソッド
) を使用して等価性をチェックします。 | 2044 引数の <code>equals</code> メソッド (たとえば、<code>Foo</code>クラスの <code>equals</code> メソッド
) を使用して等価性をチェックします。 |
1988 </p> | 2045 </p> |
1989 | 2046 |
(...skipping 17 matching lines...) Expand all Loading... |
2007 このクラスのインスタンスはハッシュデータ構造で使われています。最重要問題を修正する必要があります。 | 2064 このクラスのインスタンスはハッシュデータ構造で使われています。最重要問題を修正する必要があります。 |
2008 </p> | 2065 </p> |
2009 | 2066 |
2010 | 2067 |
2011 <h3><a name="ICAST_INT_2_LONG_AS_INSTANT">ICAST: int 値を long に変換して絶対時間として使用している
(ICAST_INT_2_LONG_AS_INSTANT)</a></h3> | 2068 <h3><a name="ICAST_INT_2_LONG_AS_INSTANT">ICAST: int 値を long に変換して絶対時間として使用している
(ICAST_INT_2_LONG_AS_INSTANT)</a></h3> |
2012 | 2069 |
2013 | 2070 |
2014 <p> | 2071 <p> |
2015 このコードは、32ビット int 値を64ビット long 値に変換して、絶対時間値を必要とするメソッドパラメータに渡しています。 | 2072 このコードは、32ビット int 値を64ビット long 値に変換して、絶対時間値を必要とするメソッドパラメータに渡しています。 |
2016 絶対時間値は、「エポック」(すなわち、1970年1月1日、00:00:00 GMT)としてわかっている標準的な基準時間からのミリ秒数です。<br> | 2073 絶対時間値は、「エポック」(すなわち、1970年1月1日、00:00:00 GMT)としてわかっている標準的な基準時間からのミリ秒数です。<br> |
2017 たとえば、次のメソッド(Date にエポックから秒を変換することを意図した)は、ひどく壊れています。 | 2074 たとえば、次のメソッド (エポックからの秒を Date へ変換することを意図した) はひどく壊れています。 |
2018 </p> | 2075 </p> |
2019 <blockquote><pre> | 2076 <blockquote><pre> |
2020 Date getDate(int seconds) { return new Date(seconds * 1000); } | 2077 Date getDate(int seconds) { return new Date(seconds * 1000); } |
2021 </pre></blockquote> | 2078 </pre></blockquote> |
2022 <p> | 2079 <p> |
2023 乗算は32ビット演算を使用して、64ビット値に変換されます。 | 2080 乗算は32ビット演算を使用して、64ビット値に変換されます。 |
2024 32ビット値は、64ビットに変換されて、絶対時間値を表すために使用されるとき、1969年12月と1970年1月の日付しか表せません。 | 2081 32ビット値は、64ビットに変換されて、絶対時間値を表すために使用されるとき、1969年12月と1970年1月の日付しか表せません。 |
2025 </p> | 2082 </p> |
2026 <p> | 2083 <p> |
2027 上記のメソッドのための正しい実装は、以下のとおりです。 | 2084 上記のメソッドの正しい実装は以下のとおりです。 |
2028 </p> | 2085 </p> |
2029 <blockquote><pre> | 2086 <blockquote><pre> |
2030 // 失敗、2037年後の日付 | 2087 // 失敗、2037年後の日付 |
2031 Date getDate(int seconds) { return new Date(seconds * 1000L); } | 2088 Date getDate(int seconds) { return new Date(seconds * 1000L); } |
2032 | 2089 |
2033 // より良い、すべての日付で動作する | 2090 // より良い、すべての日付で動作する |
2034 Date getDate(long seconds) { return new Date(seconds * 1000); } | 2091 Date getDate(long seconds) { return new Date(seconds * 1000); } |
2035 </pre></blockquote> | 2092 </pre></blockquote> |
2036 | 2093 |
2037 | 2094 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2131 | 2188 |
2132 <p> | 2189 <p> |
2133 このループは、例外をスローする以外の方法で終了させることができないように思われます。 | 2190 このループは、例外をスローする以外の方法で終了させることができないように思われます。 |
2134 </p> | 2191 </p> |
2135 | 2192 |
2136 | 2193 |
2137 <h3><a name="IL_INFINITE_RECURSIVE_LOOP">IL: 明らかな無限再帰ループ (IL_INFINITE_RECURSIVE_
LOOP)</a></h3> | 2194 <h3><a name="IL_INFINITE_RECURSIVE_LOOP">IL: 明らかな無限再帰ループ (IL_INFINITE_RECURSIVE_
LOOP)</a></h3> |
2138 | 2195 |
2139 | 2196 |
2140 <p> | 2197 <p> |
2141 このメソッドは、無条件で自分自身を呼び出します。これは、スタックオーバーフローになる無限再帰ループを示しています。 | 2198 このメソッドは、無条件で自分自身を呼び出します。これはスタックオーバーフローになる無限再帰ループを示しています。 |
2142 </p> | 2199 </p> |
2143 | 2200 |
2144 | 2201 |
2145 <h3><a name="IM_MULTIPLYING_RESULT_OF_IREM">IM: 整数剰余の結果の整数乗算 (IM_MULTIPLYING_RES
ULT_OF_IREM)</a></h3> | 2202 <h3><a name="IM_MULTIPLYING_RESULT_OF_IREM">IM: 整数剰余の結果の整数乗算 (IM_MULTIPLYING_RES
ULT_OF_IREM)</a></h3> |
2146 | 2203 |
2147 | 2204 |
2148 <p> | 2205 <p> |
2149 このコードは、整数剰余の結果に整数定数を乗算しています。 | 2206 このコードは、整数剰余の結果に整数定数を乗算しています。 |
2150 紛らわしい演算子の優先順位がないことを確実にしてください。 | 2207 紛らわしい演算子の優先順位がないことを確実にしてください。 |
2151 たとえば、i % 60 * 1000 は、i % (60 * 1000) ではなく (i % 60) * 1000 となります。 | 2208 たとえば、i % 60 * 1000 は、i % (60 * 1000) ではなく (i % 60) * 1000 となります。 |
2152 </p> | 2209 </p> |
2153 | 2210 |
2154 | 2211 |
2155 <h3><a name="INT_BAD_COMPARISON_WITH_INT_VALUE">INT: int 値と long 定数との間違った比較 (INT
_BAD_COMPARISON_WITH_INT_VALUE)</a></h3> | 2212 <h3><a name="INT_BAD_COMPARISON_WITH_INT_VALUE">INT: int 値と long 定数との間違った比較 (INT
_BAD_COMPARISON_WITH_INT_VALUE)</a></h3> |
2156 | 2213 |
2157 | 2214 |
2158 <p> | 2215 <p> |
2159 このコードは、int 値と int 値として表現できる値の範囲外にある long 定数を比較しています。 | 2216 このコードは、int 値と int 値として表される値の範囲外の long 定数を比較しています。 |
2160 この比較は無意味で、おそらく間違っています。 | 2217 この比較は無意味で、おそらく間違っています。 |
2161 </p> | 2218 </p> |
2162 | 2219 |
2163 | 2220 |
2164 <h3><a name="INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE">INT: 負でない値と負の定数との間違った比較
(INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE)</a></h3> | 2221 <h3><a name="INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE">INT: 負でない値と負の定数またはゼロとの間違
った比較 (INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE)</a></h3> |
2165 | 2222 |
2166 | 2223 |
2167 <p> | 2224 <p> |
2168 このコードは、負でないことが保証されている値と負の定数とを比較しています。 | 2225 このコードは、負でないことが保証されている値と負の定数またはゼロとを比較しています。 |
2169 </p> | 2226 </p> |
2170 | 2227 |
2171 | 2228 |
2172 <h3><a name="INT_BAD_COMPARISON_WITH_SIGNED_BYTE">INT: 符号付きバイトの間違った比較 (INT_BAD_C
OMPARISON_WITH_SIGNED_BYTE)</a></h3> | 2229 <h3><a name="INT_BAD_COMPARISON_WITH_SIGNED_BYTE">INT: 符号付きバイトの間違った比較 (INT_BAD_C
OMPARISON_WITH_SIGNED_BYTE)</a></h3> |
2173 | 2230 |
2174 | 2231 |
2175 <p> | 2232 <p> |
2176 符号付バイトのとりうる値の範囲は-128~127です。その範囲外で符号付バイトを値と比較することは無意味で間違っていそうです。 | 2233 符号付バイトのとりうる値の範囲は-128~127です。その範囲外で符号付バイトを値と比較することは無意味で間違っていそうです。 |
2177 符号付きバイト <code>b</code> を範囲が0~255の符号なしバイトに変換するには <code>0xff & b</code> を使用してく
ださい。 | 2234 符号付きバイト <code>b</code> を範囲が0~255の符号なしバイトに変換するには <code>0xff & b</code> を使用してく
ださい。 |
2178 </p> | 2235 </p> |
2179 | 2236 |
2180 | 2237 |
2181 <h3><a name="IO_APPENDING_TO_OBJECT_OUTPUT_STREAM">IO: オブジェクト出力ストリームへの追加は失敗に終わる
(IO_APPENDING_TO_OBJECT_OUTPUT_STREAM)</a></h3> | 2238 <h3><a name="IO_APPENDING_TO_OBJECT_OUTPUT_STREAM">IO: オブジェクト出力ストリームへの追加は失敗に終わる
(IO_APPENDING_TO_OBJECT_OUTPUT_STREAM)</a></h3> |
2182 | 2239 |
2183 | 2240 |
2184 <p> | 2241 <p> |
2185 このコードは、ファイルを追加モードで開いて、オブジェクト出力ストリームの中で結果をラップしています。 | 2242 このコードは、ファイルを追加モードで開いて、オブジェクト出力ストリームの中で結果をラップしています。 |
2186 これは、ファイルに格納された既存のオブジェクト出力ストリームに追加できないでしょう。 | 2243 これはファイルに格納された既存のオブジェクト出力ストリームに追加できないでしょう。 |
2187 オブジェクト出力ストリームに追加したいなら、オブジェクト出力ストリームを開いておく必要があります。 | 2244 オブジェクト出力ストリームに追加したいなら、オブジェクト出力ストリームを開いておく必要があります。 |
2188 </p> | 2245 </p> |
2189 <p> | 2246 <p> |
2190 追加モードでファイルを開き、オブジェクト出力ストリームで書き込むことができる唯一の状況は、 | 2247 追加モードでファイルを開き、オブジェクト出力ストリームで書き込むことができる唯一の状況は、 |
2191 ファイルを読み出すときにランダムアクセスモードで開き、追加を開始するところまでバイトオフセットをシークすると計画した場合です。 | 2248 ファイルを読み出すときにランダムアクセスモードで開き、追加を開始するところまでバイトオフセットをシークすると計画した場合です。 |
2192 </p> | 2249 </p> |
2193 | 2250 |
2194 | 2251 |
2195 <h3><a name="IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN">IP: メソッドで読み取られずに上書きされているパラメータ
(IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN)</a></h3> | 2252 <h3><a name="IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN">IP: メソッドで読み取られずに上書きされているパラメータ
(IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN)</a></h3> |
2196 | 2253 |
(...skipping 11 matching lines...) Expand all Loading... |
2208 このクラスは、スーパークラスの可視インスタンスフィールドと同じ名前でフィールドを定義しています。 | 2265 このクラスは、スーパークラスの可視インスタンスフィールドと同じ名前でフィールドを定義しています。 |
2209 これは紛らわしくて、メソッドがフィールドを更新するかアクセスするなら、間違いを指摘するかもしれません。 | 2266 これは紛らわしくて、メソッドがフィールドを更新するかアクセスするなら、間違いを指摘するかもしれません。 |
2210 </p> | 2267 </p> |
2211 | 2268 |
2212 | 2269 |
2213 <h3><a name="MF_METHOD_MASKS_FIELD">MF: フィールドを隠す変数を定義しているメソッド (MF_METHOD_MASKS_F
IELD)</a></h3> | 2270 <h3><a name="MF_METHOD_MASKS_FIELD">MF: フィールドを隠す変数を定義しているメソッド (MF_METHOD_MASKS_F
IELD)</a></h3> |
2214 | 2271 |
2215 | 2272 |
2216 <p> | 2273 <p> |
2217 このメソッドは、このクラスまたはスーパークラスのフィールドと同じ名前でローカル変数を定義しています。 | 2274 このメソッドは、このクラスまたはスーパークラスのフィールドと同じ名前でローカル変数を定義しています。 |
2218 これはフィールドから初期化されていない値を読み出したり初期化されていないフィールドをそのままにしておくメソッドの原因になるかもしれません。 | 2275 フィールドから初期化されていない値を読み出す、初期化されていないフィールドをそのままにしておくか、または両方を引き起こすかもしれません。 |
2219 </p> | 2276 </p> |
2220 | 2277 |
2221 | 2278 |
2222 <h3><a name="NP_ALWAYS_NULL">NP: null 値を利用している (NP_ALWAYS_NULL)</a></h3> | 2279 <h3><a name="NP_ALWAYS_NULL">NP: null 値を利用している (NP_ALWAYS_NULL)</a></h3> |
2223 | 2280 |
2224 | 2281 |
2225 <p> | 2282 <p> |
2226 ここで null 値を利用しようとしています。 | 2283 ここで null 値を利用しようとしています。 |
2227 コードが実行されると NullPointerException が発生します。 | 2284 コードが実行されると NullPointerException が発生します。 |
2228 </p> | 2285 </p> |
2229 | 2286 |
2230 | 2287 |
2231 <h3><a name="NP_ALWAYS_NULL_EXCEPTION">NP: null 値を例外経路で利用している (NP_ALWAYS_NULL_EX
CEPTION)</a></h3> | 2288 <h3><a name="NP_ALWAYS_NULL_EXCEPTION">NP: null 値を例外経路で利用している (NP_ALWAYS_NULL_EX
CEPTION)</a></h3> |
2232 | 2289 |
2233 | 2290 |
2234 <p> | 2291 <p> |
2235 例外経路上のここで null 値を利用しています。コードが実行されると NullPointerException が発生します。 | 2292 例外経路上のここで null 値を利用しています。コードが実行されると NullPointerException が発生します。 |
2236 現在の FindBugs は実行不可能な例外経路を取り除いていないので、誤検出かもしれないことに注意してください。 | 2293 現在の FindBugs は実行不可能な例外経路を刈り取れていないので、誤検出かもしれないことに注意してください。 |
2237 </p> | 2294 </p> |
2238 <p> | 2295 <p> |
2239 switch 文の default が多くの場合実行不可能なので FindBugs が例外経路である default を検討することに注意して下さい。 | 2296 switch 文の default が多くの場合実行不可能なので FindBugs が例外経路である default を検討することに注意して下さい。 |
2240 </p> | 2297 </p> |
2241 | 2298 |
2242 | 2299 |
2243 <h3><a name="NP_ARGUMENT_MIGHT_BE_NULL">NP: null の引数をチェックしていないメソッド (NP_ARGUMENT_
MIGHT_BE_NULL)</a></h3> | 2300 <h3><a name="NP_ARGUMENT_MIGHT_BE_NULL">NP: null の引数をチェックしていないメソッド (NP_ARGUMENT_
MIGHT_BE_NULL)</a></h3> |
2244 | 2301 |
2245 | 2302 |
2246 <p> | 2303 <p> |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2289 | 2346 |
2290 <h3><a name="NP_NONNULL_PARAM_VIOLATION">NP: メソッド呼び出しは非 null パラメータに対して null を渡して
いる (NP_NONNULL_PARAM_VIOLATION)</a></h3> | 2347 <h3><a name="NP_NONNULL_PARAM_VIOLATION">NP: メソッド呼び出しは非 null パラメータに対して null を渡して
いる (NP_NONNULL_PARAM_VIOLATION)</a></h3> |
2291 | 2348 |
2292 | 2349 |
2293 <p> | 2350 <p> |
2294 このメソッドは、非 null でなければならないメソッドのパラメータとして、null 値を渡しています。 | 2351 このメソッドは、非 null でなければならないメソッドのパラメータとして、null 値を渡しています。 |
2295 このパラメータは、@Nonnull として明示的にアノテートされていたか、または解析が常に null 値を利用すると示していました。 | 2352 このパラメータは、@Nonnull として明示的にアノテートされていたか、または解析が常に null 値を利用すると示していました。 |
2296 </p> | 2353 </p> |
2297 | 2354 |
2298 | 2355 |
2299 <h3><a name="NP_NONNULL_RETURN_VIOLATION">NP: null を返すかもしれないメソッドが @NonNull 宣言されて
いる (NP_NONNULL_RETURN_VIOLATION)</a></h3> | 2356 <h3><a name="NP_NONNULL_RETURN_VIOLATION">NP: null を返すかもしれないメソッドが @Nonnull 宣言されて
いる (NP_NONNULL_RETURN_VIOLATION)</a></h3> |
2300 | 2357 |
2301 | 2358 |
2302 <p> | 2359 <p> |
2303 このメソッドは、null 値を返すかもしれないのにメソッド (またはスーパークラスのメソッド) の戻り値に @NonNull が宣言されています。 | 2360 このメソッドは、null 値を返すかもしれないのにメソッド (またはスーパークラスのメソッド) の戻り値に @Nonnull が宣言されています。 |
2304 </p> | 2361 </p> |
2305 | 2362 |
2306 | 2363 |
2307 <h3><a name="NP_NULL_INSTANCEOF">NP: null とわかっている値をその型のインスタンスなのか確かめている (NP_NULL_
INSTANCEOF)</a></h3> | 2364 <h3><a name="NP_NULL_INSTANCEOF">NP: null とわかっている値をその型のインスタンスなのか確かめている (NP_NULL_
INSTANCEOF)</a></h3> |
2308 | 2365 |
2309 | 2366 |
2310 <p> | 2367 <p> |
2311 チェックされている値が null であることが保証されているので、instanceof は常に faluse を返します。 | 2368 チェックされている値が null であることが保証されているので、instanceof は常に faluse を返します。 |
2312 これは安全で、誤解や論理エラーを指摘していないことを確認してください。 | 2369 これは安全で、誤解や論理エラーを指摘していないことを確認してください。 |
2313 </p> | 2370 </p> |
2314 | 2371 |
2315 | 2372 |
2316 <h3><a name="NP_NULL_ON_SOME_PATH">NP: null 値を利用している可能性がある (NP_NULL_ON_SOME_PATH
)</a></h3> | 2373 <h3><a name="NP_NULL_ON_SOME_PATH">NP: null 値を利用している可能性がある (NP_NULL_ON_SOME_PATH
)</a></h3> |
2317 | 2374 |
2318 | 2375 |
2319 <p> | 2376 <p> |
2320 そこで分岐または文が実行されるなら null 値が利用されて NullPointerException が発生します。 | 2377 そこで分岐または文が実行されるなら null 値が利用されて NullPointerException が発生します。 |
2321 もちろん、問題は分岐または文が実行不可能で、NullPointerException が決して発生する可能性がないということかもしれません。 | 2378 もちろん、問題は分岐または文が実行不可能で、NullPointerException が決して発生する可能性がないということかもしれません。 |
2322 それを決めるのは FindBugs の能力を超えています。 | 2379 それを決めるのは FindBugs の能力を超えています。 |
2323 </p> | 2380 </p> |
2324 | 2381 |
2325 | 2382 |
2326 <h3><a name="NP_NULL_ON_SOME_PATH_EXCEPTION">NP: null 値を例外経路で利用している可能性がある (NP_NU
LL_ON_SOME_PATH_EXCEPTION)</a></h3> | 2383 <h3><a name="NP_NULL_ON_SOME_PATH_EXCEPTION">NP: null 値を例外経路で利用している可能性がある (NP_NU
LL_ON_SOME_PATH_EXCEPTION)</a></h3> |
2327 | 2384 |
2328 | 2385 |
2329 <p> | 2386 <p> |
2330 例外経路上のここで null 値が利用されています。コードが実行されると NullPointerException が発生するかもしれません。 | 2387 例外経路上のここで null 値が利用されています。コードが実行されると NullPointerException を引き起こすことがあります。 |
2331 現在の FindBugs は実行不可能な例外経路を取り除かないので、誤検出かもしれないことに注意してください。 | 2388 現在の FindBugs は実行不可能な例外経路を刈り取れていないので、誤検出かもしれないことに注意してください。 |
2332 </p> | 2389 </p> |
2333 <p> | 2390 <p> |
2334 switch 文の default が多くの場合実行不可能なので FindBugs が例外経路である default を検討することに注意して下さい。 | 2391 switch 文の default が多くの場合実行不可能なので FindBugs が例外経路である default を検討することに注意して下さい。 |
2335 </p> | 2392 </p> |
2336 | 2393 |
2337 | 2394 |
2338 <h3><a name="NP_NULL_PARAM_DEREF">NP: メソッド呼び出しは非 null パラメータに対して null を渡している (NP_
NULL_PARAM_DEREF)</a></h3> | 2395 <h3><a name="NP_NULL_PARAM_DEREF">NP: メソッド呼び出しは非 null パラメータに対して null を渡している (NP_
NULL_PARAM_DEREF)</a></h3> |
2339 | 2396 |
2340 | 2397 |
2341 <p> | 2398 <p> |
2342 このメソッド呼び出しは非 null メソッドパラメータに対して null 値を渡しています。 | 2399 このメソッド呼び出しは非 null メソッドパラメータに対して null 値を渡しています。 |
2343 パラメータは、常に非 null とすべきパラメータとしてアノテートされていたか、または解析が常に null 値を利用すると示していました。 | 2400 パラメータは、常に非 null とすべきパラメータとしてアノテートされていたか、または解析が常に null 値を利用すると示していました。 |
2344 </p> | 2401 </p> |
2345 | 2402 |
2346 | 2403 |
2347 <h3><a name="NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS">NP: メソッド呼び出しは非 null パラメー
タに対して null を渡している (NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS)</a></h3> | 2404 <h3><a name="NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS">NP: メソッド呼び出しは非 null パラメー
タに対して null を渡している (NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS)</a></h3> |
2348 | 2405 |
2349 | 2406 |
2350 <p> | 2407 <p> |
2351 すべての既知のターゲットメソッドが非 null であることをパラメータに要求する呼び出し場所で、おそらく null 値を渡しています。 | 2408 すべての既知のターゲットメソッドが非 null であることをパラメータに要求する呼び出し場所で、おそらく null 値を渡しています。 |
2352 パラメータは、常に非 null とすべきパラメータとしてアノテートされていたか、または解析が常に null 値を利用すると示していました。 | 2409 パラメータは、常に非 null とすべきパラメータとしてアノテートされていたか、または解析が常に null 値を利用すると示していました。 |
2353 </p> | 2410 </p> |
2354 | 2411 |
2355 | 2412 |
2356 <h3><a name="NP_NULL_PARAM_DEREF_NONVIRTUAL">NP: 非 null パラメータに null を渡している非仮想メソッ
ドの呼び出し (NP_NULL_PARAM_DEREF_NONVIRTUAL)</a></h3> | 2413 <h3><a name="NP_NULL_PARAM_DEREF_NONVIRTUAL">NP: 非 null パラメータに null を渡している非仮想メソッ
ドの呼び出し (NP_NULL_PARAM_DEREF_NONVIRTUAL)</a></h3> |
2357 | 2414 |
2358 | 2415 |
2359 <p> | 2416 <p> |
2360 null の可能性がある値が、非 null メソッドパラメータに渡されています。 | 2417 null の可能性がある値が 非 null メソッドパラメータに渡されています。 |
2361 パラメータは、常に非 null とすべきパラメータとしてアノテートされていたか、または解析が常に null 値を利用すると示していました。 | 2418 パラメータは、常に非 null とすべきパラメータとしてアノテートされていたか、または解析が常に null 値を利用すると示していました。 |
2362 </p> | 2419 </p> |
2363 | 2420 |
2364 | 2421 |
2365 <h3><a name="NP_OPTIONAL_RETURN_NULL">NP: Optional の戻り型を持つメソッドが明示的に null を返す (NP
_OPTIONAL_RETURN_NULL)</a></h3> | 2422 <h3><a name="NP_OPTIONAL_RETURN_NULL">NP: Optional の戻り型を持つメソッドが明示的に null を返す (NP
_OPTIONAL_RETURN_NULL)</a></h3> |
2366 | 2423 |
2367 | 2424 |
2368 <p> | 2425 <p> |
2369 Optional の戻り型の使い方は、常に明示的に null を返すのは設計が望ましくないことを意味します。 | 2426 Optional の戻り型の使い方は、常に明示的に null を返すのは設計が望ましくないことを意味します。 |
2370 null 値をこのようなケースで返すことは契約違反で、多分クライアントコードを破壊するでしょう。 | 2427 null 値をこのようなケースで返すことは契約違反で、多分クライアントコードを破壊するでしょう。 |
2371 </p> | 2428 </p> |
2372 | 2429 |
2373 | 2430 |
2374 <h3><a name="NP_STORE_INTO_NONNULL_FIELD">NP: @NonNull でアノテートされたフィールドに null を格納し
ている (NP_STORE_INTO_NONNULL_FIELD)</a></h3> | 2431 <h3><a name="NP_STORE_INTO_NONNULL_FIELD">NP: @Nonnull でアノテートされたフィールドに null を格納し
ている (NP_STORE_INTO_NONNULL_FIELD)</a></h3> |
2375 | 2432 |
2376 | 2433 |
2377 <p> | 2434 <p> |
2378 @NonNull でアノテートされたフィールドに null かもしれない値を格納しています。 | 2435 @Nonnull としてアノテートされたフィールドに null かもしれない値を格納しています。 |
2379 </p> | 2436 </p> |
2380 | 2437 |
2381 | 2438 |
2382 <h3><a name="NP_UNWRITTEN_FIELD">NP: 書き込まれていないフィールドの読み出し (NP_UNWRITTEN_FIELD)</a
></h3> | 2439 <h3><a name="NP_UNWRITTEN_FIELD">NP: 書き込まれていないフィールドの読み出し (NP_UNWRITTEN_FIELD)</a
></h3> |
2383 | 2440 |
2384 | 2441 |
2385 <p> | 2442 <p> |
2386 プログラムは、決して null でない値を書き込むとは思われないフィールドの値を利用しています。 | 2443 プログラムは、決して null でない値を書き込むとは思われないフィールドの値を利用しています。 |
2387 この値を利用すると NullPointerException が発生します。 | 2444 この値を利用すると NullPointerException が発生します。 |
2388 </p> | 2445 </p> |
(...skipping 25 matching lines...) Expand all Loading... |
2414 このメソッドは、<code>java.lang.Object</code> の <code>toString</code> メソッドを (おそらく意図的に) オ
ーバーライドしていません。 | 2471 このメソッドは、<code>java.lang.Object</code> の <code>toString</code> メソッドを (おそらく意図的に) オ
ーバーライドしていません。 |
2415 </p> | 2472 </p> |
2416 | 2473 |
2417 | 2474 |
2418 <h3><a name="NM_METHOD_CONSTRUCTOR_CONFUSION">Nm: 明らかなメソッドとコンストラクタの混乱 (NM_METHOD
_CONSTRUCTOR_CONFUSION)</a></h3> | 2475 <h3><a name="NM_METHOD_CONSTRUCTOR_CONFUSION">Nm: 明らかなメソッドとコンストラクタの混乱 (NM_METHOD
_CONSTRUCTOR_CONFUSION)</a></h3> |
2419 | 2476 |
2420 | 2477 |
2421 <p> | 2478 <p> |
2422 この正規のメソッドは定義しているクラスと同じ名前です。 | 2479 この正規のメソッドは定義しているクラスと同じ名前です。 |
2423 これはコンストラクタを意図していた可能性が高いです。もしそうなら void 戻り値の宣言を除去してください。 | 2480 これはコンストラクタを意図していた可能性が高いです。もしそうなら void 戻り値の宣言を除去してください。 |
2424 このメソッドを定義したことが偶然間違っているとわかり、正しいコンストラクタを定義したが、下位互換性のためにこのメソッドを取り除くことができないなら、メソッドを非
推奨にしてください。 | 2481 偶然メソッドを定義したことが間違いだとわかり、適切なコンストラクタを定義したが、後方互換性のためにこのメソッドを除去できないならメソッドを非推奨にしてください。 |
2425 </p> | 2482 </p> |
2426 | 2483 |
2427 | 2484 |
2428 <h3><a name="NM_VERY_CONFUSING">Nm: 非常に紛らわしい名前のメソッド (NM_VERY_CONFUSING)</a></h3> | 2485 <h3><a name="NM_VERY_CONFUSING">Nm: 非常に紛らわしい名前のメソッド (NM_VERY_CONFUSING)</a></h3> |
2429 | 2486 |
2430 | 2487 |
2431 <p> | 2488 <p> |
2432 参照されたメソッドは、大文字の使い方だけによって異なる名前があります。 | 2489 参照されたメソッドは、大文字の使い方だけによって異なる名前があります。 |
2433 大文字の使い方が同一ならメソッドの1つが他のメソッドをオーバーライドするので、非常に紛らわしいです。 | 2490 大文字の使い方が同一ならメソッドの1つが他のメソッドをオーバーライドするので、非常に紛らわしいです。 |
2434 </p> | 2491 </p> |
2435 | 2492 |
2436 | 2493 |
2437 <h3><a name="NM_WRONG_PACKAGE">Nm: パラメータの間違ったパッケージのために、スーパークラスのメソッドをオーバーライドしていない
メソッド (NM_WRONG_PACKAGE)</a></h3> | 2494 <h3><a name="NM_WRONG_PACKAGE">Nm: パラメータの間違ったパッケージのためにスーパークラスのメソッドをオーバーライドしていないメ
ソッド (NM_WRONG_PACKAGE)</a></h3> |
2438 | 2495 |
2439 | 2496 |
2440 <p> | 2497 <p> |
2441 パラメータの型がスーパークラスで対応するパラメータの型と正確に合致していないので、サブクラスのメソッドはスーパークラスの類似したメソッドをオーバーライドしていま
せん。<br> | 2498 パラメータの型がスーパークラスで対応するパラメータの型と正確に合致していないので、サブクラスのメソッドはスーパークラスの類似したメソッドをオーバーライドしていま
せん。<br> |
2442 たとえば以下のようなコードです。 | 2499 たとえば以下のようなコードです。 |
2443 </p> | 2500 </p> |
2444 <blockquote><pre> | 2501 <blockquote><pre> |
2445 import alpha.Foo; | 2502 import alpha.Foo; |
2446 | 2503 |
2447 public class A { | 2504 public class A { |
(...skipping 14 matching lines...) Expand all Loading... |
2462 | 2519 |
2463 <h3><a name="QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT">QBA: 論理式で boolean リテラル値を代入している
メソッド (QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT)</a></h3> | 2520 <h3><a name="QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT">QBA: 論理式で boolean リテラル値を代入している
メソッド (QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT)</a></h3> |
2464 | 2521 |
2465 | 2522 |
2466 <p> | 2523 <p> |
2467 このメソッドは、if または while の式の中の boolean 変数に boolean リテラル値 (true または false) を代入しています。 | 2524 このメソッドは、if または while の式の中の boolean 変数に boolean リテラル値 (true または false) を代入しています。 |
2468 おそらく、これは = による代入ではなく、== を使用して論理比較をすることになっていました。 | 2525 おそらく、これは = による代入ではなく、== を使用して論理比較をすることになっていました。 |
2469 </p> | 2526 </p> |
2470 | 2527 |
2471 | 2528 |
| 2529 <h3><a name="RANGE_ARRAY_INDEX">RANGE: 配列インデックスは範囲外 (RANGE_ARRAY_INDEX)</a></h3> |
| 2530 |
| 2531 |
| 2532 <p> |
| 2533 配列演算が行なわれますが、配列インデックスが範囲外なので実行時に ArrayIndexOutOfBoundsException が発生するでしょう。 |
| 2534 </p> |
| 2535 |
| 2536 |
| 2537 <h3><a name="RANGE_ARRAY_LENGTH">RANGE: 配列の長さは範囲外 (RANGE_ARRAY_LENGTH)</a></h3> |
| 2538 |
| 2539 |
| 2540 <p> |
| 2541 メソッドは、配列パラメータと長さパラメータで呼び出されますが、長さは範囲外です。 |
| 2542 実行時に IndexOutOfBoundsException が発生するでしょう。 |
| 2543 </p> |
| 2544 |
| 2545 |
| 2546 <h3><a name="RANGE_ARRAY_OFFSET">RANGE: 配列オフセットは範囲外 (RANGE_ARRAY_OFFSET)</a></h3
> |
| 2547 |
| 2548 |
| 2549 <p> |
| 2550 メソッドは、配列パラメータとオフセットパラメータで呼び出されますが、オフセットは範囲外です。 |
| 2551 実行時に IndexOutOfBoundsException が発生するでしょう。 |
| 2552 </p> |
| 2553 |
| 2554 |
| 2555 <h3><a name="RANGE_STRING_INDEX">RANGE: 文字列インデックスは範囲外 (RANGE_STRING_INDEX)</a></
h3> |
| 2556 |
| 2557 |
| 2558 <p> |
| 2559 文字列メソッドが呼び出されます。指定された文字列インデックスは範囲外です。 |
| 2560 実行時に StringIndexOutOfBoundsException が発生するでしょう。 |
| 2561 </p> |
| 2562 |
| 2563 |
2472 <h3><a name="RC_REF_COMPARISON">RC: 疑わしい参照比較 (RC_REF_COMPARISON)</a></h3> | 2564 <h3><a name="RC_REF_COMPARISON">RC: 疑わしい参照比較 (RC_REF_COMPARISON)</a></h3> |
2473 | 2565 |
2474 | 2566 |
2475 <p> | 2567 <p> |
2476 このメソッドは、 == または != 演算子を使用して2つの参照値を比較しています。 | 2568 このメソッドは、 == または != 演算子を使用して2つの参照値を比較しています。 |
2477 この型のインスタンスを比較する正しい方法は、一般に <code>equals</code> メソッドです。 | 2569 一般的にこの型のインスタンスを比較する正しい方法は <code>equals</code> メソッドです。 |
2478 等価で識別可能なインスタンスを作成する可能性がありますが異なるオブジェクトなので == で比較しないでください。 | 2570 等価で識別可能なインスタンスを作成する可能性がありますが異なるオブジェクトなので == で比較しないでください。 |
2479 参照によって一般に比較されるべきでないクラスの例は、<code>java.lang.Integer</code> 、<code>java.lang.Float<
/code> などです。 | 2571 参照によって一般に比較されるべきでないクラスの例は、<code>java.lang.Integer</code> 、<code>java.lang.Float<
/code> などです。 |
2480 </p> | 2572 </p> |
2481 | 2573 |
2482 | 2574 |
2483 <h3><a name="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE">RCN: すでに利用していた値の nul
l チェック (RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE)</a></h3> | 2575 <h3><a name="RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE">RCN: 既に利用していた値の null
チェック (RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE)</a></h3> |
2484 | 2576 |
2485 | 2577 |
2486 <p> | 2578 <p> |
2487 ここで値が null なのかチェックしていますが、すでに値を利用していたので null である可能性はありません。 | 2579 ここで値が null なのかチェックしていますが、既に値を利用していたので null である可能性はありません。 |
2488 値が null なら以前の利用で NullPointerException が発生していたでしょう。 | 2580 値が null なら以前の利用で NullPointerException が発生していたでしょう。 |
2489 基本的に、値が null であることを許すのかどうかに関係なく、このコードと以前の値の利用は一致しません。 | 2581 基本的に、値が null であることを許すのかどうかに関係なく、このコードと以前の値の利用は一致しません。 |
2490 チェックは冗長か、または以前の値の利用は誤りです。 | 2582 チェックは冗長か、または以前の値の利用は誤りです。 |
2491 </p> | 2583 </p> |
2492 | 2584 |
2493 | 2585 |
2494 <h3><a name="RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION">RE: 正規表現のための無効な構文 (RE_BAD_SYN
TAX_FOR_REGULAR_EXPRESSION)</a></h3> | 2586 <h3><a name="RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION">RE: 正規表現のための無効な構文 (RE_BAD_SYN
TAX_FOR_REGULAR_EXPRESSION)</a></h3> |
2495 | 2587 |
2496 | 2588 |
2497 <p> | 2589 <p> |
2498 このコードは、正規表現の構文によると無効である正規表現を使用しています。 | 2590 このコードは、正規表現の構文によると無効である正規表現を使用しています。 |
2499 この文が実行されるとき PatternSyntaxException をスローします。 | 2591 この文が実行されるとき PatternSyntaxException をスローします。 |
2500 </p> | 2592 </p> |
2501 | 2593 |
2502 | 2594 |
2503 <h3><a name="RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION">RE: 正規表現のために使われてい
る File.separator (RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION)</a></h3> | 2595 <h3><a name="RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION">RE: 正規表現のために使われてい
る File.separator (RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION)</a></h3> |
2504 | 2596 |
2505 | 2597 |
2506 <p> | 2598 <p> |
2507 このコードは、正規表現が必要とされる場所で、<code>File.separator</code> を使用しています。 | 2599 このコードは、正規表現が必要な場所で、<code>File.separator</code> を使用しています。 |
2508 これは <code>File.separator</code> がバックスラッシュである Windows プラットホームでは失敗します。 | 2600 これは <code>File.separator</code> がバックスラッシュである Windows プラットホームでは失敗します。 |
2509 バックスラッシュは正規表現ではエスケープ文字として解釈されます。 | 2601 バックスラッシュは正規表現ではエスケープ文字として解釈されます。 |
2510 その他の選択肢としては、<code>File.separator</code> の代わりに <code>File.separatorChar=='\\' ? "
\\\\" : File.separator</code> を使用できます。 | 2602 その他の選択肢としては、<code>File.separator</code> の代わりに <code>File.separatorChar=='\\' ? "
\\\\" : File.separator</code> を使用できます。 |
2511 </p> | 2603 </p> |
2512 | 2604 |
2513 | 2605 |
2514 <h3><a name="RE_POSSIBLE_UNINTENDED_PATTERN">RE: 正規表現のために使われている "." または "|" (RE_
POSSIBLE_UNINTENDED_PATTERN)</a></h3> | 2606 <h3><a name="RE_POSSIBLE_UNINTENDED_PATTERN">RE: 正規表現のために使われている "." または "|" (RE_
POSSIBLE_UNINTENDED_PATTERN)</a></h3> |
2515 | 2607 |
2516 | 2608 |
2517 <p> | 2609 <p> |
2518 String 機能が呼び出されていて、"." または "|" が引数として正規表現を取るパラメータに渡されています。 | 2610 String 機能が呼び出されていて、"." または "|" が引数として正規表現を取るパラメータに渡されています。 |
2519 これは、意図したことですか? | 2611 これは意図したことですか? |
2520 たとえば | 2612 たとえば |
2521 </p> | 2613 </p> |
2522 <ul> | 2614 <ul> |
2523 <li><code>s.replaceAll(".", "/")</code> は、すべての文字が '/' 文字に置換された String を返す</li> | 2615 <li><code>s.replaceAll(".", "/")</code> は、すべての文字が '/' 文字に置換された String を返す</li> |
2524 <li><code>s.split(".")</code> は、常に長さが0の String 配列を返す</li> | 2616 <li><code>s.split(".")</code> は、常に長さが0の String 配列を返す</li> |
2525 <li><code>"ab|cd".replaceAll("|", "/")</code> は、<code>"/a/b/|/c/d/"</code> を返す
</li> | 2617 <li><code>"ab|cd".replaceAll("|", "/")</code> は、<code>"/a/b/|/c/d/"</code> を返す
</li> |
2526 <li><code>"ab|cd".split("|")</code> は、6個の要素がある配列を返す: <code>[, a, b, |, c, d]</
code></li> | 2618 <li><code>"ab|cd".split("|")</code> は、6個の要素がある配列を返す: <code>[, a, b, |, c, d]</
code></li> |
2527 </ul> | 2619 </ul> |
2528 | 2620 |
2529 | 2621 |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2722 実際には内部クラスと外部クラスのスレッドローカルとの間にデッドロックの深刻な危険性があります。 | 2814 実際には内部クラスと外部クラスのスレッドローカルとの間にデッドロックの深刻な危険性があります。 |
2723 内部クラスが static でないので、外部クラスへの参照を保持します。 | 2815 内部クラスが static でないので、外部クラスへの参照を保持します。 |
2724 スレッドローカルに内部クラスのインスタンスの参照があるなら、内部と外部のインスタンスの両方が到達可能になり、ガベージされません。 | 2816 スレッドローカルに内部クラスのインスタンスの参照があるなら、内部と外部のインスタンスの両方が到達可能になり、ガベージされません。 |
2725 </p> | 2817 </p> |
2726 | 2818 |
2727 | 2819 |
2728 <h3><a name="SIO_SUPERFLUOUS_INSTANCEOF">SIO: instanceof 演算子を使用した不必要な型チェック (SIO_
SUPERFLUOUS_INSTANCEOF)</a></h3> | 2820 <h3><a name="SIO_SUPERFLUOUS_INSTANCEOF">SIO: instanceof 演算子を使用した不必要な型チェック (SIO_
SUPERFLUOUS_INSTANCEOF)</a></h3> |
2729 | 2821 |
2730 | 2822 |
2731 <p> | 2823 <p> |
2732 オブジェクトが要求する型であるかどうかにかかわらず、静的に確定している可能性があるのに instanceof 演算子を使用して型チェックをしています。 | 2824 オブジェクトが要求する型であるかどうかにかかわらず、静的に判定される instanceof 演算子を使用して型チェックをしています。 |
2733 </p> | 2825 </p> |
2734 | 2826 |
2735 | 2827 |
2736 <h3><a name="SQL_BAD_PREPARED_STATEMENT_ACCESS">SQL: インデックスが0で PreparedStatement
にアクセスしようとしているメソッド (SQL_BAD_PREPARED_STATEMENT_ACCESS)</a></h3> | 2828 <h3><a name="SQL_BAD_PREPARED_STATEMENT_ACCESS">SQL: インデックスが0で PreparedStatement
にアクセスしようとしているメソッド (SQL_BAD_PREPARED_STATEMENT_ACCESS)</a></h3> |
2737 | 2829 |
2738 | 2830 |
2739 <p> | 2831 <p> |
2740 インデックスが0で、<code>PreparedStatement</code> の setXXX メソッドを呼び出しています。 | 2832 インデックスが0で、<code>PreparedStatement</code> の setXXX メソッドを呼び出しています。 |
2741 インデックスは1から開始するので、これは常に間違いです。 | 2833 インデックスは1から開始するので、これは常に間違いです。 |
2742 </p> | 2834 </p> |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2783 | 2875 |
2784 <p> | 2876 <p> |
2785 <code>readResolve</code> メソッドが直列化機構で認識されるためには static メソッドとして宣言してはいけません。 | 2877 <code>readResolve</code> メソッドが直列化機構で認識されるためには static メソッドとして宣言してはいけません。 |
2786 </p> | 2878 </p> |
2787 | 2879 |
2788 | 2880 |
2789 <h3><a name="TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED">TQ: 型修飾子でアノテーションされた値がその修
飾子を付けてはならない値を必要とする場所で使われている (TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED)</a></h3> | 2881 <h3><a name="TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED">TQ: 型修飾子でアノテーションされた値がその修
飾子を付けてはならない値を必要とする場所で使われている (TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED)</a></h3> |
2790 | 2882 |
2791 | 2883 |
2792 <p> | 2884 <p> |
2793 型修飾子であのてーとされた値がその修飾子を付けてはならない値を必要とする場所で使われています。 | 2885 型修飾子でアノテートされた値がその修飾子を付けてはならない値を必要とする場所で使われています。 |
2794 </p> | 2886 </p> |
2795 <p> | 2887 <p> |
2796 より正確に、when=ALWAYS を指定した型修飾子でアノテートされた値が到達することが保証されているか同じ型修飾子で when=NEVER を指定する場所で
使用しています。 | 2888 より正確に、when=ALWAYS を指定した型修飾子でアノテートされた値が到達することが保証されているか同じ型修飾子で when=NEVER を指定する場所で
使用しています。 |
2797 </p> | 2889 </p> |
2798 <p> | 2890 <p> |
2799 たとえば、@NonNegative が型修飾子アノテーション @Negative(when=When.NEVER) の略称だとします。 | 2891 たとえば、@NonNegative は型修飾子アノテーション @Negative(when=When.NEVER) の略称とします。 |
2800 以下のコードは、return 文が @NonNegative 値を要求するが @Negative としてマークされている値を受け取るのでこの警告を生成します。 | 2892 以下のコードは、return 文が @NonNegative 値を要求するが @Negative としてマークされている値を受け取るのでこの警告を生成します。 |
2801 </p> | 2893 </p> |
2802 <blockquote><pre> | 2894 <blockquote><pre> |
2803 public @NonNegative Integer example(@Negative Integer value) { | 2895 public @NonNegative Integer example(@Negative Integer value) { |
2804 return value; | 2896 return value; |
2805 } | 2897 } |
2806 </pre></blockquote> | 2898 </pre></blockquote> |
2807 | 2899 |
2808 | 2900 |
2809 <h3><a name="TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS">TQ: 互換性のない型修
飾子による比較値 (TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS)</a></h3> | 2901 <h3><a name="TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS">TQ: 互換性のない型修
飾子による比較値 (TQ_COMPARING_VALUES_WITH_INCOMPATIBLE_TYPE_QUALIFIERS)</a></h3> |
2810 | 2902 |
2811 | 2903 |
2812 <p> | 2904 <p> |
2813 型修飾子アノテーションを指定した値がその修飾子のない値と比較しています。 | 2905 型修飾子アノテーションを指定した値がその修飾子のない値と比較しています。 |
2814 </p> | 2906 </p> |
2815 <p> | 2907 <p> |
2816 より正確に、when=ALWAYS を指定した型修飾子でアノテートされた値が同じ型修飾子で when=NEVER を指定する値と比較しています。 | 2908 より正確に、when=ALWAYS を指定した型修飾子でアノテートされた値が同じ型修飾子で when=NEVER を指定する値と比較しています。 |
2817 </p> | 2909 </p> |
2818 <p> | 2910 <p> |
2819 たとえば、@NonNegative が型修飾子アノテーション @Negative(when=When.NEVER) の略称だとします。 | 2911 たとえば、@NonNegative は型修飾子アノテーション @Negative(when=When.NEVER) の略称とします。 |
2820 以下のコードは、return 文が @NonNegative 値を要求するが、@Negative としてマークされている値を受け取るのでこの警告を生成します。 | 2912 以下のコードは、return 文が @NonNegative 値を要求するが、@Negative としてマークされている値を受け取るのでこの警告を生成します。 |
2821 </p> | 2913 </p> |
2822 <blockquote><pre> | 2914 <blockquote><pre> |
2823 public boolean example(@Negative Integer value1, @NonNegative Integer value2) { | 2915 public boolean example(@Negative Integer value1, @NonNegative Integer value2) { |
2824 return value1.equals(value2); | 2916 return value1.equals(value2); |
2825 } | 2917 } |
2826 </pre></blockquote> | 2918 </pre></blockquote> |
2827 | 2919 |
2828 | 2920 |
2829 <h3><a name="TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK">TQ: 型修飾子を付けていないかもしれない値がそ
の型修飾子を必要とする方法で常に使われている (TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK)</a></h3> | 2921 <h3><a name="TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK">TQ: 型修飾子を付けていないかもしれない値がそ
の型修飾子を必要とする方法で常に使われている (TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK)</a></h3> |
(...skipping 26 matching lines...) Expand all Loading... |
2856 | 2948 |
2857 | 2949 |
2858 <h3><a name="TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED">TQ: 型修飾子がない値が
修飾子を必要とする場所で使われている (TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED)</a></h
3> | 2950 <h3><a name="TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED">TQ: 型修飾子がない値が
修飾子を必要とする場所で使われている (TQ_UNKNOWN_VALUE_USED_WHERE_ALWAYS_STRICTLY_REQUIRED)</a></h
3> |
2859 | 2951 |
2860 | 2952 |
2861 <p> | 2953 <p> |
2862 値が型修飾子アノテーションを必要とする方法で使われています。型修飾子は厳密なので、ツールは適切なアノテーションを指定していない値を拒絶します。 | 2954 値が型修飾子アノテーションを必要とする方法で使われています。型修飾子は厳密なので、ツールは適切なアノテーションを指定していない値を拒絶します。 |
2863 </p> | 2955 </p> |
2864 <p> | 2956 <p> |
2865 厳密なアノテーションを指定しているので値を型変換します。戻り値が厳密なアノテーションでアノテートされる同一性機能を定義してください。 | 2957 厳密なアノテーションを指定しているので値を型変換します。戻り値が厳密なアノテーションでアノテートされる同一性機能を定義してください。 |
2866 これは、厳密な型修飾子アノテーションで非アノテート値を値に変える唯一の方法です。 | 2958 これは厳密な型修飾子アノテーションで非アノテート値を値に変える唯一の方法です。 |
2867 </p> | 2959 </p> |
2868 | 2960 |
2869 | 2961 |
2870 <h3><a name="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS">UMAC: 呼び出し不可能なメソッドが無名クラス
で定義されている (UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS)</a></h3> | 2962 <h3><a name="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS">UMAC: 呼び出し不可能なメソッドが無名クラス
で定義されている (UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS)</a></h3> |
2871 | 2963 |
2872 | 2964 |
2873 <p> | 2965 <p> |
2874 この無名クラスは、直接呼び出されないスーパークラスのメソッドをオーバーライドしていないメソッドを定義しています。 | 2966 この無名クラスは、直接呼び出されないスーパークラスのメソッドをオーバーライドしていないメソッドを定義しています。 |
2875 他のクラスのメソッドが無名クラスで宣言されたメソッドを直接呼び出せないので、このメソッドは呼び出し不可能であると思われます。 | 2967 他のクラスのメソッドが無名クラスで宣言されたメソッドを直接呼び出せないので、このメソッドは呼び出し不可能だと思われます。 |
2876 メソッドは単にデッドコードであるかもしれません。しかし、メソッドがスーパークラスで宣言されるメソッドをオーバーライドすることを意図した可能性もあります。 | 2968 メソッドは単にデッドコードであるかもしれません。しかし、メソッドがスーパークラスで宣言されるメソッドをオーバーライドすることを意図した可能性もあります。 |
2877 そして、タイプミスまたは他の誤りのために、メソッドは、実際、それが意図されるメソッドをオーバーライドしません。 | 2969 そして、タイプミスまたは他の誤りのためにメソッドは、実際には意図しているメソッドをオーバーライドしません。 |
2878 </p> | 2970 </p> |
2879 | 2971 |
2880 | 2972 |
2881 <h3><a name="UR_UNINIT_READ">UR: コンストラクタで初期化されていないフィールドを読み出している (UR_UNINIT_READ)
</a></h3> | 2973 <h3><a name="UR_UNINIT_READ">UR: コンストラクタで初期化されていないフィールドを読み出している (UR_UNINIT_READ)
</a></h3> |
2882 | 2974 |
2883 | 2975 |
2884 <p> | 2976 <p> |
2885 このコンストラクタは、まだ値が代入されていないフィールドを読み出しています。 | 2977 このコンストラクタは、まだ値が代入されていないフィールドを読み出しています。 |
2886 多くの場合、プログラマがコンストラクタのパラメータの代わりに誤ってフィールドを使用するときに起きます。 | 2978 多くの場合、プログラマがコンストラクタのパラメータの代わりに誤ってフィールドを使うときに起きます。 |
2887 </p> | 2979 </p> |
2888 | 2980 |
2889 | 2981 |
2890 <h3><a name="UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR">UR: スーパークラスのコンストラクタから
呼び出されるメソッドで初期化されていないフィールドを読み出している (UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR)
</a></h3> | 2982 <h3><a name="UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR">UR: スーパークラスのコンストラクタから
呼び出されるメソッドで初期化されていないフィールドを読み出している (UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR)
</a></h3> |
2891 | 2983 |
2892 | 2984 |
2893 <p> | 2985 <p> |
2894 このメソッドは、スーパークラスのコンストラクタで呼びされています。この時点では、クラスのフィールドはまだ初期化されていません。 | 2986 このメソッドは、スーパークラスのコンストラクタで呼びされています。この時点では、クラスのフィールドはまだ初期化されていません。 |
2895 </p> | 2987 </p> |
2896 <p> | 2988 <p> |
(...skipping 26 matching lines...) Expand all Loading... |
2923 したがって、<code>A</code> のコンストラクタが <code>getValue</code> を呼び出すとき、<code>value</code>
の初期化されていない値が読み出されます。 | 3015 したがって、<code>A</code> のコンストラクタが <code>getValue</code> を呼び出すとき、<code>value</code>
の初期化されていない値が読み出されます。 |
2924 </p> | 3016 </p> |
2925 | 3017 |
2926 | 3018 |
2927 | 3019 |
2928 <h3><a name="DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY">USELESS_STRING: 名前のない配列で
toString メソッドを呼び出している (DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY)</a></h3> | 3020 <h3><a name="DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY">USELESS_STRING: 名前のない配列で
toString メソッドを呼び出している (DMI_INVOKING_TOSTRING_ON_ANONYMOUS_ARRAY)</a></h3> |
2929 | 3021 |
2930 | 3022 |
2931 <p> | 3023 <p> |
2932 このコードは、無名の配列で <code>toString</code> メソッドを呼び出しています。「[C@16f0472」のようなかなり役に立たない結果を生成
します。 | 3024 このコードは、無名の配列で <code>toString</code> メソッドを呼び出しています。「[C@16f0472」のようなかなり役に立たない結果を生成
します。 |
2933 配列のコンテンツを与え、読める文字列に変換するために、<code>Arrays.toString()</code> を使うことを検討してください。<br> | 3025 配列のコンテンツを与え、読める文字列に変換するために <code>Arrays.toString()</code> を使用することを検討してください。<br> |
2934 『Programming Puzzlers』の第3章、パズル12を参照してください。 | 3026 『Programming Puzzlers』の第3章、パズル12を参照してください。 |
2935 </p> | 3027 </p> |
2936 | 3028 |
2937 | 3029 |
2938 <h3><a name="DMI_INVOKING_TOSTRING_ON_ARRAY">USELESS_STRING: 配列で toString メソッドを呼
び出している (DMI_INVOKING_TOSTRING_ON_ARRAY)</a></h3> | 3030 <h3><a name="DMI_INVOKING_TOSTRING_ON_ARRAY">USELESS_STRING: 配列で toString メソッドを呼
び出している (DMI_INVOKING_TOSTRING_ON_ARRAY)</a></h3> |
2939 | 3031 |
2940 | 3032 |
2941 <p> | 3033 <p> |
2942 このコードは、配列で <code>toString</code> メソッドを呼び出しています。「[C@16f0472」のようなかなり役に立たない結果を生成します
。 | 3034 このコードは、配列で <code>toString</code> メソッドを呼び出しています。「[C@16f0472」のようなかなり役に立たない結果を生成します
。 |
2943 配列のコンテンツを与え、読める文字列に変換するために、<code>Arrays.toString()</code> を使うことを検討してください。<br> | 3035 配列のコンテンツを与え、読める文字列に変換するために <code>Arrays.toString()</code> を使用することを検討してください。<br> |
2944 『Programming Puzzlers』の第3章、パズル12を参照してください。 | 3036 『Programming Puzzlers』の第3章、パズル12を参照してください。 |
2945 </p> | 3037 </p> |
2946 | 3038 |
2947 | 3039 |
2948 <h3><a name="VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY">USELESS_STRING: 書式文字列を使
用して役に立たない方法で配列をフォーマットしている (VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY)</a></h3> | 3040 <h3><a name="VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY">USELESS_STRING: 書式文字列を使
用して役に立たない方法で配列をフォーマットしている (VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY)</a></h3> |
2949 | 3041 |
2950 | 3042 |
2951 <p> | 3043 <p> |
2952 書式文字列でフォーマットされている引数の1つは配列です。 | 3044 書式文字列でフォーマットされている引数の1つは配列です。 |
2953 これは [I@304282 のようなかなり役に立たない書式を使用してフォーマットされます。それは配列のコンテンツを表示しません。 | 3045 [I@304282 のように配列のコンテンツを表示しないかなり役に立たない書式を使用してフォーマットされます。 |
2954 フォーマットで扱う前に <code>Arrays.asList(...)</code> を使用して配列をラップすることを検討してください。 | 3046 フォーマットで扱う前に <code>Arrays.asList(...)</code> を使用して配列をラップすることを検討してください。 |
2955 </p> | 3047 </p> |
2956 | 3048 |
2957 | 3049 |
2958 <h3><a name="UWF_NULL_FIELD">UwF: null に設定されるだけのフィールド (UWF_NULL_FIELD)</a></h3> | 3050 <h3><a name="UWF_NULL_FIELD">UwF: null に設定されるだけのフィールド (UWF_NULL_FIELD)</a></h3> |
2959 | 3051 |
2960 | 3052 |
2961 <p> | 3053 <p> |
2962 このフィールドに定数値 null を書き込みます。したがって、フィールドの読み出しは null を返します。 | 3054 このフィールドに定数値 null を書き込みます。したがって、フィールドの読み出しは null を返します。 |
2963 誤りをチェックしてください。使わないなら除去してください。 | 3055 誤りをチェックしてください。役に立たないなら除去してください。 |
2964 </p> | 3056 </p> |
2965 | 3057 |
2966 | 3058 |
2967 <h3><a name="UWF_UNWRITTEN_FIELD">UwF: 書き込まれていないフィールド (UWF_UNWRITTEN_FIELD)</a><
/h3> | 3059 <h3><a name="UWF_UNWRITTEN_FIELD">UwF: 書き込まれていないフィールド (UWF_UNWRITTEN_FIELD)</a><
/h3> |
2968 | 3060 |
2969 | 3061 |
2970 <p> | 3062 <p> |
2971 このフィールドは決して書き込まれません。このフィールドからの読み出しはデフォルト値を返します。 | 3063 このフィールドは決して書き込まれません。このフィールドからの読み出しはデフォルト値を返します。 |
2972 誤りをチェックしてください (フィールドは初期化するべきでしたか?)。使わないなら除去してください。 | 3064 誤りをチェックしてください (フィールドは初期化するべきでしたか?)。役に立たないなら除去してください。 |
2973 </p> | 3065 </p> |
2974 | 3066 |
2975 | 3067 |
2976 <h3><a name="VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG">VA: 可変長引数を期待しているメソッドにプリ
ミティブ型の配列を渡している (VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG)</a></h3> | 3068 <h3><a name="VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG">VA: 可変長引数を期待しているメソッドにプリ
ミティブ型の配列を渡している (VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG)</a></h3> |
2977 | 3069 |
2978 | 3070 |
2979 <p> | 3071 <p> |
2980 このコードは可変長引数をとるメソッドにプリミティブ型の配列を渡しています。 | 3072 このコードは可変長引数をとるメソッドにプリミティブ型の配列を渡しています。 |
2981 これは、プリミティブ型の配列を保持するために長さが1の配列を作成してメソッドに渡します。 | 3073 これはプリミティブ型の配列を保持するために長さが1の配列を作成してメソッドに渡します。 |
2982 </p> | 3074 </p> |
2983 | 3075 |
2984 | 3076 |
2985 <h3><a name="LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE">LG: ロガーの変更は OpenJDK の弱参照が原因で潜
在的に失われる (LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)</a></h3> | 3077 <h3><a name="LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE">LG: ロガーの変更は OpenJDK の弱参照が原因で潜
在的に失われる (LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE)</a></h3> |
2986 | 3078 |
2987 | 3079 |
2988 <p> | 3080 <p> |
2989 OpenJDK は、潜在的非互換性を取り入れました。特に、<code>java.util.logging.Logger</code> は振る舞いが変更されていま
す。 | 3081 OpenJDK は、潜在的非互換性を取り入れました。特に、<code>java.util.logging.Logger</code> は振る舞いが変更されていま
す。 |
2990 強参照を使用する代わりに、現在、内部的に弱参照を使用しています。 | 3082 強参照を使用する代わりに弱参照を内部的に使用しています。 |
2991 それは理にかなった変更ですが、残念ながらいくつかのコードは古い振る舞いに依存しています。 | 3083 それは理にかなった変更ですが、残念ながらいくつかのコードは古い振る舞いに依存しています。 |
2992 ロガーの構成を変更するとき、ロガーへの参照を捨てます。 | 3084 ロガーの構成を変更するとき、ロガーへの参照を捨てます。 |
2993 つまり、ガベージコレクタはそのメモリを回収できます。それは、ロガーの構成が失われることを意味します。<br> | 3085 つまり、ガベージコレクタはそのメモリを回収できます。それは、ロガーの構成が失われることを意味します。<br> |
2994 たとえば、以下を検討してください。 | 3086 たとえば、以下を検討してください。 |
2995 </p> | 3087 </p> |
2996 <blockquote><pre> | 3088 <blockquote><pre> |
2997 public static void initLogging() throws Exception { | 3089 public static void initLogging() throws Exception { |
2998 Logger logger = Logger.getLogger("edu.umd.cs"); | 3090 Logger logger = Logger.getLogger("edu.umd.cs"); |
2999 logger.addHandler(new FileHandler()); // ロガーの構成の変更 | 3091 logger.addHandler(new FileHandler()); // ロガーの構成の変更 |
3000 logger.setUseParentHandlers(false); // 別のロガーの構成の変更 | 3092 logger.setUseParentHandlers(false); // 別のロガーの構成の変更 |
(...skipping 12 matching lines...) Expand all Loading... |
3013 </pre></blockquote> | 3105 </pre></blockquote> |
3014 <p> | 3106 <p> |
3015 Ulf Ochsenfahrt と Eric Fellheimer | 3107 Ulf Ochsenfahrt と Eric Fellheimer |
3016 </p> | 3108 </p> |
3017 | 3109 |
3018 | 3110 |
3019 <h3><a name="OBL_UNSATISFIED_OBLIGATION">OBL: ストリームやリソースのクリーンアップに失敗するかもしれないメソッド
(OBL_UNSATISFIED_OBLIGATION)</a></h3> | 3111 <h3><a name="OBL_UNSATISFIED_OBLIGATION">OBL: ストリームやリソースのクリーンアップに失敗するかもしれないメソッド
(OBL_UNSATISFIED_OBLIGATION)</a></h3> |
3020 | 3112 |
3021 | 3113 |
3022 <p> | 3114 <p> |
3023 このメソッドは、ストリーム、データベースオブジェクト、または明示的にクリーンアップ操作を必要としている他のリソースのクリーンアップ (クローズする、片付ける)
に失敗するかもしれません。 | 3115 このメソッドは、ストリーム、データベースオブジェクト、またはクリーンアップ操作を明示的に必要としている他のリソースのクリーンアップ (クローズする、片付ける)
に失敗するかもしれません。 |
3024 </p> | 3116 </p> |
3025 <p> | 3117 <p> |
3026 一般に、メソッドがストリープや他のリソースを開いたなら、メソッドはストリームやリソースがメソッドが戻る前にクリーンアップされることを確認するために、try/fi
nally ブロックを使用するべきです。 | 3118 一般的にメソッドがストリープや他のリソースを開いたなら、メソッドはストリームやリソースがメソッドが戻る前にクリーンアップされることを確認するために try/fi
nally ブロックを使用するべきです。 |
3027 </p> | 3119 </p> |
3028 <p> | 3120 <p> |
3029 このバグパターンは、OS_OPEN_STREAM と ODR_OPEN_DATABASE_RESOURCE と基本的に同じですが異なる (そして、うまくいけばよ
り良い) 静的解析技術に基づいています。 | 3121 このバグパターンは、OS_OPEN_STREAM と ODR_OPEN_DATABASE_RESOURCE と基本的に同じですが異なる (そして、うまくいけばよ
り良い) 静的解析技術に基づいています。 |
3030 私たちは、このバグパターンの有効性についてのフィードバックを得ることに関心があります。 | 3122 私たちは、このバグパターンの有効性についてのフィードバックを得ることに関心があります。 |
3031 どちらかの方法でフィードバックを送ってください。 | 3123 どちらかの方法でフィードバックを送ってください。 |
3032 </p> | 3124 </p> |
3033 <ul> | 3125 <ul> |
3034 <li>send email to findbugs@cs.umd.edu</li> | 3126 <li>send email to findbugs@cs.umd.edu</li> |
3035 <li>file a bug report: <a href="http://findbugs.sourceforge.net/reportingBugs.
html">http://findbugs.sourceforge.net/reportingBugs.html</a></li> | 3127 <li>file a bug report: <a href="http://findbugs.sourceforge.net/reportingBugs.
html">http://findbugs.sourceforge.net/reportingBugs.html</a></li> |
3036 </ul> | 3128 </ul> |
3037 <p> | 3129 <p> |
3038 特に、このバグパターンの誤検出抑制探索法は詳細にわたって調整されていないので、誤検出についてのレポートは我々の助けになります。 | 3130 特に、このバグパターンの誤検出抑制探索法は詳細にわたって調整されていないので、誤検出についてのレポートは我々の助けになります。 |
3039 </p> | 3131 </p> |
3040 <p> | 3132 <p> |
3041 解析技術の説明は、Weimer と Necula による <i>Finding and Preventing Run-Time Error Handling M
istakes</i> を参照してください。 | 3133 解析技術の説明は、Weimer と Necula による <i>Finding and Preventing Run-Time Error Handling M
istakes</i> を参照してください。 |
3042 </p> | 3134 </p> |
3043 | 3135 |
3044 | 3136 |
3045 <h3><a name="OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE">OBL: チェック例外でストリームやリソースのク
リーンアップに失敗するかもしれないメソッド (OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE)</a></h3> | 3137 <h3><a name="OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE">OBL: チェック例外でストリームやリソースのク
リーンアップに失敗するかもしれないメソッド (OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE)</a></h3> |
3046 | 3138 |
3047 | 3139 |
3048 <p> | 3140 <p> |
3049 このメソッドは、ストリーム、データベースオブジェクト、または明示的にクリーンアップ操作を必要としている他のリソースのクリーンアップ (クローズする、片付ける)
に失敗するかもしれません。 | 3141 このメソッドは、ストリーム、データベースオブジェクト、またはクリーンアップ操作を明示的必要としている他のリソースのクリーンアップ (クローズする、片付ける) に
失敗するかもしれません。 |
3050 </p> | 3142 </p> |
3051 <p> | 3143 <p> |
3052 一般に、メソッドがストリープや他のリソースを開いたなら、メソッドはストリームやリソースがメソッドが戻る前にクリーンアップされることを確認するために、try/fi
nally ブロックを使用するべきです。 | 3144 一般的にメソッドがストリープや他のリソースを開いたなら、メソッドはストリームやリソースがメソッドが戻る前にクリーンアップされることを確認するために try/fi
nally ブロックを使用するべきです。 |
3053 </p> | 3145 </p> |
3054 <p> | 3146 <p> |
3055 このバグパターンは、OS_OPEN_STREAM と ODR_OPEN_DATABASE_RESOURCE と基本的に同じですが異なる (そして、うまくいけばよ
り良い) 静的解析技術に基づいています。 | 3147 このバグパターンは、OS_OPEN_STREAM と ODR_OPEN_DATABASE_RESOURCE と基本的に同じですが異なる (そして、うまくいけばよ
り良い) 静的解析技術に基づいています。 |
3056 私たちは、このバグパターンの有効性についてのフィードバックを得ることに関心があります。 | 3148 私たちは、このバグパターンの有効性についてのフィードバックを得ることに関心があります。 |
3057 どちらかの方法でフィードバックを送ってください。 | 3149 どちらかの方法でフィードバックを送ってください。 |
3058 </p> | 3150 </p> |
3059 <ul> | 3151 <ul> |
3060 <li>send email to findbugs@cs.umd.edu</li> | 3152 <li>send email to findbugs@cs.umd.edu</li> |
3061 <li>file a bug report: <a href="http://findbugs.sourceforge.net/reportingBugs.
html">http://findbugs.sourceforge.net/reportingBugs.html</a></li> | 3153 <li>file a bug report: <a href="http://findbugs.sourceforge.net/reportingBugs.
html">http://findbugs.sourceforge.net/reportingBugs.html</a></li> |
3062 </ul> | 3154 </ul> |
3063 <p> | 3155 <p> |
3064 特に、このバグパターンの誤検出抑制探索法は詳細にわたって調整されていないので、誤検出についてのレポートは我々の助けになります。 | 3156 特に、このバグパターンの誤検出抑制探索法は詳細にわたって調整されていないので、誤検出についてのレポートは我々の助けになります。 |
3065 </p> | 3157 </p> |
3066 <p> | 3158 <p> |
3067 解析技術の説明は、Weimer と Necula による <i>Finding and Preventing Run-Time Error Handling M
istakes</i> を参照してください。 | 3159 解析技術の説明は、Weimer と Necula による <i>Finding and Preventing Run-Time Error Handling M
istakes</i> を参照してください。 |
3068 </p> | 3160 </p> |
3069 | 3161 |
3070 | 3162 |
3071 <h3><a name="DM_CONVERT_CASE">Dm: 呼び出したメソッドの Locale パラメータの使用を検討する (DM_CONVERT_CA
SE)</a></h3> | 3163 <h3><a name="DM_CONVERT_CASE">Dm: 呼び出したメソッドの Locale パラメータの使用を検討する (DM_CONVERT_CA
SE)</a></h3> |
3072 | 3164 |
3073 | 3165 |
3074 <p> | 3166 <p> |
3075 文字列がプラットホームのデフォルトエンコーディングを使用して大文字、小文字に変換されています。 | 3167 文字列がプラットホームのデフォルトエンコーディングを使用して大文字、小文字に変換されています。 |
3076 国際文字で使われると不適切な変換になるかもしれません。 | 3168 国際文字で使われると不適切な変換になることがあります。 |
3077 </p> | 3169 </p> |
3078 <ul> | 3170 <ul> |
3079 <li>String.toUpperCase(Locale l)</li> | 3171 <li>String.toUpperCase(Locale l)</li> |
3080 <li>String.toLowerCase(Locale l)</li> | 3172 <li>String.toLowerCase(Locale l)</li> |
3081 </ul> | 3173 </ul> |
3082 | 3174 |
3083 | 3175 |
3084 <h3><a name="DM_DEFAULT_ENCODING">Dm: デフォルトエンコーディングへの依存 (DM_DEFAULT_ENCODING)</a
></h3> | 3176 <h3><a name="DM_DEFAULT_ENCODING">Dm: デフォルトエンコーディングへの依存 (DM_DEFAULT_ENCODING)</a
></h3> |
3085 | 3177 |
3086 | 3178 |
3087 <p> | 3179 <p> |
3088 byte から String (または String から byte) への変換で、デフォルトプラットホームエンコーディングが適切であると仮定するメソッドの呼び
出しを発見しました。 | 3180 byte から String (または String から byte) への変換で、デフォルトプラットホームエンコーディングが適切だと仮定するメソッドの呼び出し
を発見しました。 |
3089 これは、アプリケーションの振る舞いがプラットホーム間で異なる原因となります。代替 API を使用して、明示的に文字セット名または Charset オブジェクトを
指定して下さい。 | 3181 これはアプリケーションの振る舞いがプラットホーム間で異なる原因となります。代替 API を使用して、文字セット名または Charset オブジェクトを明示的に指
定して下さい。 |
3090 </p> | 3182 </p> |
3091 | 3183 |
3092 | 3184 |
3093 <h3><a name="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED">DP: doPrivileged ブロック内で
作成されるべきクラスローダ (DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED)</a></h3> | 3185 <h3><a name="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED">DP: doPrivileged ブロック内で
作成されるべきクラスローダ (DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED)</a></h3> |
3094 | 3186 |
3095 | 3187 |
3096 <p> | 3188 <p> |
3097 このコードはクラスローダを作成していますが、セキュリティ管理がインストールされるなら許可が必要です。 | 3189 このコードはクラスローダを作成していますが、セキュリティ管理がインストールされるなら許可が必要です。 |
3098 このコードがセキュリティ許可がないコードによって呼び出されるなら、クラスローダの作成は doPrivileged ブロックの中で行う必要があります。 | 3190 このコードがセキュリティ許可がないコードによって呼び出されるなら、クラスローダの作成は doPrivileged ブロックの中で行う必要があります。 |
3099 </p> | 3191 </p> |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3139 <h3><a name="EI_EXPOSE_STATIC_REP2">MS: static フィールドに可変オブジェクトを格納することによって、内部の静的状態
を暴露するかもしれないメソッド (EI_EXPOSE_STATIC_REP2)</a></h3> | 3231 <h3><a name="EI_EXPOSE_STATIC_REP2">MS: static フィールドに可変オブジェクトを格納することによって、内部の静的状態
を暴露するかもしれないメソッド (EI_EXPOSE_STATIC_REP2)</a></h3> |
3140 | 3232 |
3141 | 3233 |
3142 <p> | 3234 <p> |
3143 このコードは、static フィールドに外部の可変オブジェクトを格納しています。 | 3235 このコードは、static フィールドに外部の可変オブジェクトを格納しています。 |
3144 可変オブジェクトのチェックされていない変更がセキュリティや他の重要なプロパティを危うくするでしょう。 | 3236 可変オブジェクトのチェックされていない変更がセキュリティや他の重要なプロパティを危うくするでしょう。 |
3145 何か違うことをする必要があります。オブジェクトのコピーを保存することは、多くの状況でより良いアプローチです。 | 3237 何か違うことをする必要があります。オブジェクトのコピーを保存することは、多くの状況でより良いアプローチです。 |
3146 </p> | 3238 </p> |
3147 | 3239 |
3148 | 3240 |
3149 <h3><a name="MS_CANNOT_BE_FINAL">MS: final でないフィールドは悪質なコードから保護できない (MS_CANNOT_BE
_FINAL)</a></h3> | 3241 <h3><a name="MS_CANNOT_BE_FINAL">MS: final でないフィールドは悪意のあるコードから保護できない (MS_CANNOT_
BE_FINAL)</a></h3> |
3150 | 3242 |
3151 | 3243 |
3152 <p> | 3244 <p> |
3153 この可変 static フィールドは、悪質なコードや偶然別のパッケージによって変更される可能性があります。 | 3245 この可変 static フィールドは悪意のあるコードや偶然別のパッケージによって変更できます。 |
3154 残念ながらこのような使い方は簡単に解決できません。 | 3246 残念ながらこのような使い方は簡単に解決できません。 |
3155 </p> | 3247 </p> |
3156 | 3248 |
3157 | 3249 |
3158 <h3><a name="MS_EXPOSE_REP">MS: 配列を返すことによって内部表現を暴露するかもしれない public static メソッド (M
S_EXPOSE_REP)</a></h3> | 3250 <h3><a name="MS_EXPOSE_REP">MS: 配列を返すことによって内部表現を暴露するかもしれない public static メソッド (M
S_EXPOSE_REP)</a></h3> |
3159 | 3251 |
3160 | 3252 |
3161 <p> | 3253 <p> |
3162 public static メソッドは、クラスの 静的な状態の一部である配列の参照を返します。 | 3254 public static メソッドは、クラスの 静的な状態の一部である配列の参照を返します。 |
3163 このメソッドを呼び出すどんなコードも、基底配列を自由に変更できます。 | 3255 このメソッドを呼び出すどんなコードも、基底配列を自由に変更できます。 |
3164 解決策は、配列のコピーを返すことです。 | 3256 解決策は、配列のコピーを返すことです。 |
3165 </p> | 3257 </p> |
3166 | 3258 |
3167 | 3259 |
3168 <h3><a name="MS_FINAL_PKGPROTECT">MS: final かつパッケージプロテクテッドにすべきフィールド (MS_FINAL_PK
GPROTECT)</a></h3> | 3260 <h3><a name="MS_FINAL_PKGPROTECT">MS: final かつパッケージプロテクテッドにすべきフィールド (MS_FINAL_PK
GPROTECT)</a></h3> |
3169 | 3261 |
3170 | 3262 |
3171 <p> | 3263 <p> |
3172 この可変 static フィールドは、悪質なコードや偶然別のパッケージによって変更される可能性があります。 | 3264 この可変 static フィールドは悪意のあるコードや偶然別のパッケージによって変更できます。 |
3173 フィールドは、脆弱性を回避するために final および/またはパッケージプロテクテッドにします。 | 3265 フィールドは、脆弱性を回避するために final および/またはパッケージプロテクテッドにします。 |
3174 </p> | 3266 </p> |
3175 | 3267 |
3176 | 3268 |
3177 <h3><a name="MS_MUTABLE_ARRAY">MS: 可変配列のフィールド (MS_MUTABLE_ARRAY)</a></h3> | 3269 <h3><a name="MS_MUTABLE_ARRAY">MS: 可変配列のフィールド (MS_MUTABLE_ARRAY)</a></h3> |
3178 | 3270 |
3179 | 3271 |
3180 <p> | 3272 <p> |
3181 この final static フィールドは、配列を参照しているので、悪質なコードや偶然別のパッケージによってアクセスされる可能性があります。 | 3273 この final static フィールドは配列を参照しているので、悪意のあるコードや偶然別のパッケージによってアクセスできます。 |
3182 このコードは、配列のコンテンツを自由に変更できます。 | 3274 このコードは、配列のコンテンツを自由に変更できます。 |
3183 </p> | 3275 </p> |
3184 | 3276 |
3185 | 3277 |
| 3278 <h3><a name="MS_MUTABLE_COLLECTION">MS: 可変コレクションのフィールド (MS_MUTABLE_COLLECTION)</
a></h3> |
| 3279 |
| 3280 |
| 3281 <p> |
| 3282 可変コレクションのインスタンスが final static フィールドに割り当てられています。 |
| 3283 したがって、 悪意のあるコードや偶然別のパッケージによって変更できます。 |
| 3284 脆弱性を避けるために Collections.unmodifiableSet/List/Map などでこのフィールドをラップすることを検討してください。 |
| 3285 </p> |
| 3286 |
| 3287 |
| 3288 <h3><a name="MS_MUTABLE_COLLECTION_PKGPROTECT">MS: パッケージプロテクテッドにすべき可変コレクションのフィール
ド (MS_MUTABLE_COLLECTION_PKGPROTECT)</a></h3> |
| 3289 |
| 3290 |
| 3291 <p> |
| 3292 可変コレクションのインスタンスが final static フィールドに割り当てられています。 |
| 3293 したがって、悪意のあるコードや偶然別のパッケージによって変更できます。 |
| 3294 フィールドは脆弱性を避けるためにパッケージプロテクテッドにできます。 |
| 3295 代わりに Collections.unmodifiableSet/List/Map などでこのフィールドをラップしても脆弱性を避けることができます。 |
| 3296 </p> |
| 3297 |
| 3298 |
3186 <h3><a name="MS_MUTABLE_HASHTABLE">MS: 可変 Hashtable のフィールド (MS_MUTABLE_HASHTABLE
)</a></h3> | 3299 <h3><a name="MS_MUTABLE_HASHTABLE">MS: 可変 Hashtable のフィールド (MS_MUTABLE_HASHTABLE
)</a></h3> |
3187 | 3300 |
3188 | 3301 |
3189 <p> | 3302 <p> |
3190 この final static フィールドは、Hashtable を参照しているので、悪質なコードや偶然別のパッケージによってアクセスされる可能性があります。 | 3303 この final static フィールドは Hashtable を参照しているので、悪意のあるコードや偶然別のパッケージによってアクセスできます。 |
3191 このコードは、Hashtable のコンテンツを自由に変更できます。 | 3304 このコードは、Hashtable のコンテンツを自由に変更できます。 |
3192 </p> | 3305 </p> |
3193 | 3306 |
3194 | 3307 |
3195 <h3><a name="MS_OOI_PKGPROTECT">MS: インタフェースから移動してパッケージプロテクテッドにすべきフィールド (MS_OOI_P
KGPROTECT)</a></h3> | 3308 <h3><a name="MS_OOI_PKGPROTECT">MS: インタフェースから移動してパッケージプロテクテッドにすべきフィールド (MS_OOI_P
KGPROTECT)</a></h3> |
3196 | 3309 |
3197 | 3310 |
3198 <p> | 3311 <p> |
3199 インタフェースに定義された final static フィールドが、配列や Hashtable などの可変オブジェクトを参照しています。 | 3312 インタフェースに定義された final static フィールドが配列や Hashtable などの可変オブジェクトを参照しています。 |
3200 この可変オブジェクトは、悪質なコードや偶然別のパッケージによって変更される可能性があります。 | 3313 この可変オブジェクトは悪意のあるコードや偶然別のパッケージによって変更できます。 |
3201 これを解決するために、フィールドはクラスへ移動する必要があり、脆弱性を回避するためにパッケージプロテクテッドにします。 | 3314 これを解決するためにフィールドはクラスへ移動する必要があり、脆弱性を回避するためにパッケージプロテクテッドにします。 |
3202 </p> | 3315 </p> |
3203 | 3316 |
3204 | 3317 |
3205 <h3><a name="MS_PKGPROTECT">MS: パッケージプロテクテッドにすべきフィールド (MS_PKGPROTECT)</a></h3> | 3318 <h3><a name="MS_PKGPROTECT">MS: パッケージプロテクテッドにすべきフィールド (MS_PKGPROTECT)</a></h3> |
3206 | 3319 |
3207 | 3320 |
3208 <p> | 3321 <p> |
3209 この可変 static フィールドは、悪質なコードや偶然別のパッケージによって変更される可能性があります。 | 3322 この可変 static フィールドは悪意のあるコードや偶然別のパッケージによって変更できます。 |
3210 フィールドは、脆弱性を回避するためにパッケージプロテクテッドにします。 | 3323 フィールドは、脆弱性を回避するためにパッケージプロテクテッドにします。 |
3211 </p> | 3324 </p> |
3212 | 3325 |
3213 | 3326 |
3214 <h3><a name="MS_SHOULD_BE_FINAL">MS: final にすべきフィールド (MS_SHOULD_BE_FINAL)</a></h
3> | 3327 <h3><a name="MS_SHOULD_BE_FINAL">MS: final にすべきフィールド (MS_SHOULD_BE_FINAL)</a></h
3> |
3215 | 3328 |
3216 | 3329 |
3217 <p> | 3330 <p> |
3218 final でない public static フィールドは、悪質なコードや偶然別のパッケージによって変更される可能性があります。 | 3331 final でない public static フィールドは悪意のあるコードや偶然別のパッケージによって変更できます。 |
3219 フィールドは、脆弱性を回避するために final にします。 | 3332 フィールドは、脆弱性を回避するために final にします。 |
3220 </p> | 3333 </p> |
3221 | 3334 |
3222 | 3335 |
3223 <h3><a name="MS_SHOULD_BE_REFACTORED_TO_BE_FINAL">MS: final でないフィールドはリファクタリングするべ
き (MS_SHOULD_BE_REFACTORED_TO_BE_FINAL)</a></h3> | 3336 <h3><a name="MS_SHOULD_BE_REFACTORED_TO_BE_FINAL">MS: final でないフィールドはリファクタリングするべ
き (MS_SHOULD_BE_REFACTORED_TO_BE_FINAL)</a></h3> |
3224 | 3337 |
3225 | 3338 |
3226 <p> | 3339 <p> |
3227 final でない public static フィールドは、悪質なコードや偶然別のパッケージによって変更される可能性があります。 | 3340 final でない public static フィールドは悪意のあるコードや偶然別のパッケージによって変更できます。 |
3228 フィールドは、脆弱性を回避するために final にします。 | 3341 フィールドは、脆弱性を回避するために final にします。 |
3229 しかしながら、スタティックイニシャライザには複数のフィールドへの書き込みがあるので、何らかのリファクタリングを必要とするでしょう。 | 3342 しかしながら、スタティックイニシャライザには複数のフィールドへの書き込みがあるので、何らかのリファクタリングを必要とするでしょう。 |
3230 </p> | 3343 </p> |
3231 | 3344 |
3232 | 3345 |
3233 <h3><a name="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION">AT: 並行抽象の呼び出しシーケンス
はアトミックではないかもしれない (AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION)</a></h3> | 3346 <h3><a name="AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION">AT: 並行抽象の呼び出しシーケンス
はアトミックではないかもしれない (AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION)</a></h3> |
3234 | 3347 |
3235 | 3348 |
3236 <p> | 3349 <p> |
3237 このコードには並行抽象化 (たとえば、並行ハッシュマップ) の呼び出しシーケンスがあります。 | 3350 このコードには並行抽象化 (たとえば、並行ハッシュマップ) の呼び出しシーケンスがあります。 |
3238 これらの呼び出しは原子的に実行されません。 | 3351 これらの呼び出しは原子的に実行されません。 |
3239 </p> | 3352 </p> |
3240 | 3353 |
3241 | 3354 |
3242 <h3><a name="DC_DOUBLECHECK">DC: フィールドのダブルチェックの可能性 (DC_DOUBLECHECK)</a></h3> | 3355 <h3><a name="DC_DOUBLECHECK">DC: フィールドのダブルチェックの可能性 (DC_DOUBLECHECK)</a></h3> |
3243 | 3356 |
3244 | 3357 |
3245 <p> | 3358 <p> |
3246 このメソッドにはダブルチェックロッキングのインスタンスがあるかもしれません。このイディオムは、Java のメモリモデルでは正しくありません。<br> | 3359 このメソッドにはダブルチェックロッキングのインスタンスがあるかもしれません。このイディオムは、Java のメモリモデルでは正しくありません。<br> |
3247 詳細は、<a href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.h
tml" >http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html</a>
を参照してください。 | 3360 詳細は、<a href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.h
tml" >http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html</a>
を参照してください。 |
3248 </p> | 3361 </p> |
3249 | 3362 |
3250 | 3363 |
| 3364 <h3><a name="DC_PARTIALLY_CONSTRUCTED">DC: 部分的に初期化されたオブジェクトを暴露する可能性がある (DC_PARTI
ALLY_CONSTRUCTED)</a></h3> |
| 3365 |
| 3366 |
| 3367 <p> |
| 3368 ダブルチェックロッキングと共に遅延初期化フィールドを使用するメソッドのようです。 |
| 3369 フィールドが正しく volatile として宣言される間にオブジェクトの内部構造がフィールドに割り当てられた後で変更される可能性があります。 |
| 3370 したがって、他のスレッドが部分的に初期化されたオブジェクトを見るかもしれません。 |
| 3371 </p> |
| 3372 <p> |
| 3373 この問題を直すために、最初にローカル変数をオブジェクトに格納して、完全に構築した後で volatile フィールドを保存することを考えてください。 |
| 3374 </p> |
| 3375 |
| 3376 |
3251 <h3><a name="DL_SYNCHRONIZATION_ON_BOOLEAN">DL: Boolean の同期化 (DL_SYNCHRONIZATION
_ON_BOOLEAN)</a></h3> | 3377 <h3><a name="DL_SYNCHRONIZATION_ON_BOOLEAN">DL: Boolean の同期化 (DL_SYNCHRONIZATION
_ON_BOOLEAN)</a></h3> |
3252 | 3378 |
3253 | 3379 |
3254 <p> | 3380 <p> |
3255 <code>Boolean</code> のようなボクシングされたプリミティブ型の定数で同期化しています。 | 3381 <code>Boolean</code> のようなボクシングされたプリミティブ型の定数で同期化しています。 |
3256 </p> | 3382 </p> |
3257 <blockquote><pre> | 3383 <blockquote><pre> |
3258 private static Boolean inited = Boolean.FALSE; | 3384 private static Boolean inited = Boolean.FALSE; |
3259 | 3385 |
3260 synchronized(inited) { | 3386 synchronized(inited) { |
(...skipping 16 matching lines...) Expand all Loading... |
3277 このコードは、Integer のようなボクシングされたプリミティブ型の定数で同期化しています。 | 3403 このコードは、Integer のようなボクシングされたプリミティブ型の定数で同期化しています。 |
3278 </p> | 3404 </p> |
3279 <blockquote><pre> | 3405 <blockquote><pre> |
3280 private static Integer count = 0; | 3406 private static Integer count = 0; |
3281 | 3407 |
3282 synchronized(count) { | 3408 synchronized(count) { |
3283 count++; | 3409 count++; |
3284 } | 3410 } |
3285 </pre></blockquote> | 3411 </pre></blockquote> |
3286 <p> | 3412 <p> |
3287 <code>Integer</code> オブジェクトはキャッシュして共有される可能性があります。 | 3413 <code>Integer</code> オブジェクトはキャッシュして共有できます。 |
3288 他の無関係なコードと同じオブジェクトで同期化している可能性があるので、無応答やデッドロックの原因になります。 | 3414 他の無関係なコードと同じオブジェクトで同期化している可能性があるので、無応答やデッドロックの原因になります。 |
3289 </p> | 3415 </p> |
3290 <p> | 3416 <p> |
3291 CERT の <a href="https://www.securecoding.cert.org/confluence/display/java/CON08-
J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchronize
on objects that may be reused</a> を参照してください。 | 3417 CERT の <a href="https://www.securecoding.cert.org/confluence/display/java/CON08-
J.+Do+not+synchronize+on+objects+that+may+be+reused">CON08-J. Do not synchronize
on objects that may be reused</a> を参照してください。 |
3292 </p> | 3418 </p> |
3293 | 3419 |
3294 | 3420 |
3295 <h3><a name="DL_SYNCHRONIZATION_ON_SHARED_CONSTANT">DL: 正準化した文字列の同期化 (DL_SYNCHRO
NIZATION_ON_SHARED_CONSTANT)</a></h3> | 3421 <h3><a name="DL_SYNCHRONIZATION_ON_SHARED_CONSTANT">DL: 正準化した文字列の同期化 (DL_SYNCHRO
NIZATION_ON_SHARED_CONSTANT)</a></h3> |
3296 | 3422 |
3297 | 3423 |
(...skipping 28 matching lines...) Expand all Loading... |
3326 .. do something .. | 3452 .. do something .. |
3327 } | 3453 } |
3328 </pre></blockquote> | 3454 </pre></blockquote> |
3329 <p> | 3455 <p> |
3330 このコードは、 fileLock を以下のように宣言するとより良くなります。 | 3456 このコードは、 fileLock を以下のように宣言するとより良くなります。 |
3331 </p> | 3457 </p> |
3332 <blockquote><pre> | 3458 <blockquote><pre> |
3333 private static final Object fileLock = new Object(); | 3459 private static final Object fileLock = new Object(); |
3334 </pre></blockquote> | 3460 </pre></blockquote> |
3335 <p> | 3461 <p> |
3336 既存のコードとしては間違っていないのかもしれませんが、紛らわしいので将来リファクタリングするべきかもしれません。 | 3462 既存のコードとしては間違っていないかもしれないが、紛らわしいので将来リファクタリングするべきかもしれません。 |
3337 たとえば、IntelliJ の "Remove Boxing" のようなリファクタリングは Java 仮想マシンを通して共有される正準化された <code>In
teger</code> オブジェクトを使用するように置き換えてしまい、非常に紛らわしい振る舞いと潜在的デッドロックの原因になります。 | 3463 たとえば、IntelliJ の "Remove Boxing" のようなリファクタリングは Java 仮想マシンを通して共有される正準化された <code>In
teger</code> オブジェクトを使用するように置き換えてしまい、非常に紛らわしい振る舞いと潜在的デッドロックの原因になります。 |
3338 </p> | 3464 </p> |
3339 | 3465 |
3340 | 3466 |
3341 <h3><a name="DM_MONITOR_WAIT_ON_CONDITION">Dm: Condition で wait メソッドを呼び出している (DM
_MONITOR_WAIT_ON_CONDITION)</a></h3> | 3467 <h3><a name="DM_MONITOR_WAIT_ON_CONDITION">Dm: Condition で wait メソッドを呼び出している (DM
_MONITOR_WAIT_ON_CONDITION)</a></h3> |
3342 | 3468 |
3343 | 3469 |
3344 <p> | 3470 <p> |
3345 このメソッドは、<code>java.util.concurrent.locks.Condition</code> オブジェクトで <code>wait</co
de> メソッドを呼び出しています。 | 3471 このメソッドは、<code>java.util.concurrent.locks.Condition</code> オブジェクトで <code>wait</co
de> メソッドを呼び出しています。 |
3346 <code>Condition</code> オブジェクトを待機させるためには <code>Condition</code> インタフェースで定義された <co
de>await</code> メソッドを使用するべきです。 | 3472 <code>Condition</code> オブジェクトを待機させるためには <code>Condition</code> インタフェースで定義された <co
de>await</code> メソッドを使用するべきです。 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3386 <li>読み出しの2倍の重み付けをした書き込みで、非同期フィールドのアクセス (読み出しと書き込み) 数がすべてのアクセスのわずか1/3</li> | 3512 <li>読み出しの2倍の重み付けをした書き込みで、非同期フィールドのアクセス (読み出しと書き込み) 数がすべてのアクセスのわずか1/3</li> |
3387 </ul> | 3513 </ul> |
3388 <p | 3514 <p |
3389 このバグパターンに合致する典型的なバグは、スレッドセーフを意図したクラスでメソッドを同期化させることを忘れていることです。 | 3515 このバグパターンに合致する典型的なバグは、スレッドセーフを意図したクラスでメソッドを同期化させることを忘れていることです。 |
3390 </p> | 3516 </p> |
3391 <p> | 3517 <p> |
3392 ディテクタがどこでフィールドが同期化なしでアクセスされると信じていたかを示すコードの場所に「非同期アクセス」というラベルがついているノードを選択できます。 | 3518 ディテクタがどこでフィールドが同期化なしでアクセスされると信じていたかを示すコードの場所に「非同期アクセス」というラベルがついているノードを選択できます。 |
3393 </p> | 3519 </p> |
3394 <p> | 3520 <p> |
3395 不正確ないろいろな原因がこのディテクタにあることに注意してください。 | 3521 不正確ないろいろな原因がこのディテクタにあることに注意してください。 |
3396 たとえば、ディテクタはロックを保持されるすべての状況を静的に検出できるというわけではありません。 | 3522 たとえば、ディテクタはロックを保持されるすべての状況を静的に検出できるわけではありません。 |
3397 また、ディテクタがロックされたアクセスとアンロックされたアクセスの区別が正確なときでも、問題のコードは依然として正しいかもしれません。 | 3523 また、ディテクタがロックされたアクセスとアンロックされたアクセスの区別が正確なときでも、問題のコードは依然として正しいかもしれません。 |
3398 </p> | 3524 </p> |
3399 | 3525 |
3400 | 3526 |
3401 <h3><a name="IS_FIELD_NOT_GUARDED">IS: 並行アクセスに対してガードされていないフィールド (IS_FIELD_NOT_GU
ARDED)</a></h3> | 3527 <h3><a name="IS_FIELD_NOT_GUARDED">IS: 並行アクセスに対してガードされていないフィールド (IS_FIELD_NOT_GU
ARDED)</a></h3> |
3402 | 3528 |
3403 | 3529 |
3404 <p> | 3530 <p> |
3405 このフィールドは、net.jcip.annotations.GuardedBy または javax.annotation.concurrent.GuardedB
y でアノテートされていますが、アノテーションに違反すると思われる方法でアクセスできます。 | 3531 このフィールドは、net.jcip.annotations.GuardedBy または javax.annotation.concurrent.GuardedB
y でアノテートされていますが、アノテーションに違反すると思われる方法でアクセスできます。 |
3406 </p> | 3532 </p> |
(...skipping 29 matching lines...) Expand all Loading... |
3436 (たとえば、util.concurrent の Condition オブジェクト) で、<code>wait</code> メソッド、<code>notify<
/code> メソッド、<code>notifyAll</code> メソッドを呼び出しています。 | 3562 (たとえば、util.concurrent の Condition オブジェクト) で、<code>wait</code> メソッド、<code>notify<
/code> メソッド、<code>notifyAll</code> メソッドを呼び出しています。 |
3437 これはおそらくあなたが望むことではありません。たとえそれを望むとしても、他の開発者が非常に紛らわしいことを理解して、設計を変更することを検討するべきです。 | 3563 これはおそらくあなたが望むことではありません。たとえそれを望むとしても、他の開発者が非常に紛らわしいことを理解して、設計を変更することを検討するべきです。 |
3438 </p> | 3564 </p> |
3439 | 3565 |
3440 | 3566 |
3441 <h3><a name="LI_LAZY_INIT_STATIC">LI: static フィールドの間違った遅延初期化 (LI_LAZY_INIT_STATI
C)</a></h3> | 3567 <h3><a name="LI_LAZY_INIT_STATIC">LI: static フィールドの間違った遅延初期化 (LI_LAZY_INIT_STATI
C)</a></h3> |
3442 | 3568 |
3443 | 3569 |
3444 <p> | 3570 <p> |
3445 このメソッドにはvolatile でない static フィールドの非同期な遅延初期化があります。 | 3571 このメソッドにはvolatile でない static フィールドの非同期な遅延初期化があります。 |
3446 コンパイラやプロセッサが命令を並べ替えるかもしれないので、メソッドが複数のスレッドによって呼び出されるかもしれないなら、 | 3572 コンパイラやプロセッサが命令を並べ替えるかもしれないので、メソッドが複数のスレッドによって呼び出されるなら、 |
3447 スレッドは完全に初期化されたオブジェクトを見るとは保証されていません。 | 3573 スレッドは完全に初期化されたオブジェクトを見るとは保証されていません。 |
3448 フィールドにアクセスした際に、中途半端に初期化されたインスタンスが見えてしまう危険があります。 | 3574 フィールドにアクセスした際に、中途半端に初期化されたインスタンスが見えてしまう危険があります。 |
3449 この問題を修正するために、フィールドを volatile にできます。<br> | 3575 この問題を修正するためにフィールドを volatile にできます。<br> |
3450 詳細は、<a href="http://www.cs.umd.edu/~pugh/java/memoryModel/">Java Memory Model we
b site</a> を参照してください。 | 3576 詳細は、<a href="http://www.cs.umd.edu/~pugh/java/memoryModel/">Java Memory Model we
b site</a> を参照してください。 |
3451 </p> | 3577 </p> |
3452 | 3578 |
3453 | 3579 |
3454 <h3><a name="LI_LAZY_INIT_UPDATE_STATIC">LI: 更新される static フィールドの間違った遅延初期化 (LI_LA
ZY_INIT_UPDATE_STATIC)</a></h3> | 3580 <h3><a name="LI_LAZY_INIT_UPDATE_STATIC">LI: 更新される static フィールドの間違った遅延初期化 (LI_LA
ZY_INIT_UPDATE_STATIC)</a></h3> |
3455 | 3581 |
3456 | 3582 |
3457 <p> | 3583 <p> |
3458 このメソッドにはstatic フィールドの非同期な遅延初期化があります。 | 3584 このメソッドにはstatic フィールドの非同期な遅延初期化があります。 |
3459 フィールドが設定された後で、その場所に格納されるオブジェクトはさらに更新されるかアクセスされます。 | 3585 フィールドが設定された後で、その場所に格納されるオブジェクトはさらに更新されるかアクセスされます。 |
3460 それが設定されるとすぐに、フィールドの設定は他のスレッドに見えます。 | 3586 それが設定されるとすぐに、フィールドを設定することは他のスレッドに見えます。 |
3461 フィールドを設定するさらなるアクセスがオブジェクトを初期化するのに役に立つなら、 | 3587 フィールドを設定するさらなるアクセスがオブジェクトを初期化するのに役に立つなら、 |
3462 それが完全に初期化されるまでどんな他のスレッドも格納されたオブジェクトにアクセスするのを防がないかぎり、非常に深刻なマルチスレッドバグがあります。 | 3588 それが完全に初期化されるまでどんな他のスレッドも格納されたオブジェクトにアクセスするのを防がないかぎり、非常に深刻なマルチスレッドバグがあります。 |
3463 </p> | 3589 </p> |
3464 <p> | 3590 <p> |
3465 たとえメソッドが複数のスレッドによって決して呼び出されないと確信していても、 | 3591 たとえメソッドが複数のスレッドによって決して呼び出されないと確信していても、 |
3466 それは、フィールドに設定している値が完全にデータを読み込まれるか初期化されるまで、 static フィールドを設定しないほうが良いかもしれません。 | 3592 それは、フィールドに設定している値が完全にデータを読み込まれるか初期化されるまで、 static フィールドを設定しないほうが良いかもしれません。 |
3467 </p> | 3593 </p> |
3468 | 3594 |
3469 | 3595 |
3470 <h3><a name="ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD">ML: フィールドを同期化でガードしよう
とする無駄な試み (ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD)</a></h3> | 3596 <h3><a name="ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD">ML: フィールドを同期化でガードしよう
とする無駄な試み (ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD)</a></h3> |
3471 | 3597 |
3472 | 3598 |
3473 <p> | 3599 <p> |
3474 このメソッドは、フィールドの同時更新に対して同期化でガードしようとしています。しかし、フィールドをガードするとフィールドではなく、フィールドが参照するオブジェク
トのロックを獲得します。 | 3600 このメソッドは、フィールドの同時更新に対して同期化でガードしようとしています。しかし、フィールドをガードするとフィールドではなく、フィールドが参照するオブジェク
トのロックを獲得します。 |
3475 これはあなたが必要とする相互排除を提供しないかもしれません。 | 3601 これはあなたが必要とする相互排除ができないかもしれません。 |
3476 他のスレッドは (他の目的のための) 参照されたオブジェクトのロックを獲得するかもしれません。<br> | 3602 他のスレッドは (他の目的のための) 参照されたオブジェクトのロックを獲得するかもしれません。<br> |
3477 このパターンの例は以下のようになります。 | 3603 このパターンの例は以下のようになります。 |
3478 </p> | 3604 </p> |
3479 <blockquote><pre> | 3605 <blockquote><pre> |
3480 private Long myNtfSeqNbrCounter = new Long(0); | 3606 private Long myNtfSeqNbrCounter = new Long(0); |
3481 private Long getNotificationSequenceNumber() { | 3607 private Long getNotificationSequenceNumber() { |
3482 Long result = null; | 3608 Long result = null; |
3483 synchronized(myNtfSeqNbrCounter) { | 3609 synchronized(myNtfSeqNbrCounter) { |
3484 result = new Long(myNtfSeqNbrCounter.longValue() + 1); | 3610 result = new Long(myNtfSeqNbrCounter.longValue() + 1); |
3485 myNtfSeqNbrCounter = new Long(result.longValue()); | 3611 myNtfSeqNbrCounter = new Long(result.longValue()); |
3486 } | 3612 } |
3487 return result; | 3613 return result; |
3488 } | 3614 } |
3489 </pre></blockquote> | 3615 </pre></blockquote> |
3490 | 3616 |
3491 | 3617 |
3492 <h3><a name="ML_SYNC_ON_UPDATED_FIELD">ML: 更新されるフィールドで同期化しているメソッド (ML_SYNC_ON_UP
DATED_FIELD)</a></h3> | 3618 <h3><a name="ML_SYNC_ON_UPDATED_FIELD">ML: 更新されるフィールドで同期化しているメソッド (ML_SYNC_ON_UP
DATED_FIELD)</a></h3> |
3493 | 3619 |
3494 | 3620 |
3495 <p> | 3621 <p> |
3496 このメソッドは、可変フィールドから参照されたオブジェクトで同期化しています。 | 3622 このメソッドは、可変フィールドから参照されたオブジェクトで同期化しています。 |
3497 異なるスレッドが異なるオブジェクトで同期化しているかもしれないので、これは有効な意味を持っている可能性が低いです。 | 3623 異なるスレッドが異なるオブジェクトで同期化しているかもしれないので、有用な意味を持っている可能性が低いです。 |
3498 </p> | 3624 </p> |
3499 | 3625 |
3500 | 3626 |
3501 <h3><a name="MSF_MUTABLE_SERVLET_FIELD">MSF: 可変サーブレットフィールド (MSF_MUTABLE_SERVLET_
FIELD)</a></h3> | 3627 <h3><a name="MSF_MUTABLE_SERVLET_FIELD">MSF: 可変サーブレットフィールド (MSF_MUTABLE_SERVLET_
FIELD)</a></h3> |
3502 | 3628 |
3503 | 3629 |
3504 <p> | 3630 <p> |
3505 Web サーバは、一般的にサーブレットや JSP クラスのインスタンスを1つだけ作成します (すなわち、シングルトンとして扱います)。 | 3631 Web サーバは、一般的にサーブレットや JSP クラスのインスタンスを1つだけ作成します (すなわち、シングルトンとして扱います)。 |
3506 複数のスレッドが複数同時に発生するリクエストを処理するためにインスタンスのメソッドを呼び出します。 | 3632 複数のスレッドが複数同時のリクエストに応えるためにそのインスタンスでメソッドを呼び出します。 |
3507 したがって、可変インスタンスフィールドは一般に競合状態を作成します。 | 3633 したがって、一般に可変インスタンスフィールドは競合状態を作ります。 |
3508 </p> | 3634 </p> |
3509 | 3635 |
3510 | 3636 |
3511 <h3><a name="MWN_MISMATCHED_NOTIFY">MWN: 不整合な notify メソッド (MWN_MISMATCHED_NOTIFY
)</a></h3> | 3637 <h3><a name="MWN_MISMATCHED_NOTIFY">MWN: 不整合な notify メソッド (MWN_MISMATCHED_NOTIFY
)</a></h3> |
3512 | 3638 |
3513 | 3639 |
3514 <p> | 3640 <p> |
3515 このメソッドは、オブジェクトで明らかにロックを保持することなく <code>Object.notify()</code> や <code>Object.noti
fyAll()</code> を呼び出しています。 | 3641 このメソッドは、オブジェクトで明らかにロックを保持することなく <code>Object.notify()</code> や <code>Object.noti
fyAll()</code> を呼び出しています。 |
3516 保持されるロックがない状態で、<code>notify</code> メソッドや <code>notifyAll</code> メソッドを呼び出すことは、<co
de>IllegalMonitorStateException</code> をスローすることになります。 | 3642 保持されるロックがない状態で、<code>notify</code> メソッドや <code>notifyAll</code> メソッドを呼び出すことは、<co
de>IllegalMonitorStateException</code> をスローすることになります。 |
3517 </p> | 3643 </p> |
3518 | 3644 |
3519 | 3645 |
3520 <h3><a name="MWN_MISMATCHED_WAIT">MWN: 不整合な wait メソッド (MWN_MISMATCHED_WAIT)</a><
/h3> | 3646 <h3><a name="MWN_MISMATCHED_WAIT">MWN: 不整合な wait メソッド (MWN_MISMATCHED_WAIT)</a><
/h3> |
3521 | 3647 |
3522 | 3648 |
3523 <p> | 3649 <p> |
3524 このメソッドは、オブジェクトで明らかにロックを保持することなく、<code>Object.wait()</code> を呼び出しています。 | 3650 このメソッドは、オブジェクトで明らかにロックを保持することなく、<code>Object.wait()</code> を呼び出しています。 |
3525 保持されるロックがない状態で、<code>wait</code> メソッドを呼び出すことは、<code>IllegalMonitorStateException
</code> をスローすることになります。 | 3651 保持されるロックがない状態で、<code>wait</code> メソッドを呼び出すことは、<code>IllegalMonitorStateException
</code> をスローすることになります。 |
3526 </p> | 3652 </p> |
3527 | 3653 |
3528 | 3654 |
3529 <h3><a name="NN_NAKED_NOTIFY">NN: 裸の notify メソッド (NN_NAKED_NOTIFY)</a></h3> | 3655 <h3><a name="NN_NAKED_NOTIFY">NN: 裸の notify メソッド (NN_NAKED_NOTIFY)</a></h3> |
3530 | 3656 |
3531 | 3657 |
3532 <p> | 3658 <p> |
3533 <code>notify</code> メソッドまたは <code>notifyAll</code> メソッドへの呼び出しは可変オブジェクト状態にどんな (明ら
かな) 付随的な変更ももたらされませんでした。 | 3659 <code>notify</code> メソッドまたは <code>notifyAll</code> メソッドへの呼び出しは可変オブジェクト状態にどんな (明ら
かな) 付随的な変更ももたらされませんでした。 |
3534 一般に、別のスレッドが期待しているいくつかの条件が真になったので、モニタで <code>notify</code> メソッドが呼び出されます。 | 3660 一般的に別のスレッドが期待しているいくつかの条件が真になったので、モニタで <code>notify</code> メソッドが呼び出されます。 |
3535 しかしながら、意味がある条件のために、両方のスレッドに見えるヒープオブジェクトを含まなければなりません。 | 3661 しかしながら、意味がある条件のために両方のスレッドに見えるヒープオブジェクトを含まなければなりません。 |
3536 </p> | 3662 </p> |
3537 <p> | 3663 <p> |
3538 可変オブジェクトの状態変更が通知があるメソッドを呼び出したメソッドで起こったかもしれないので、このバグが必ずしもエラーを示すというわけではありません。 | 3664 可変オブジェクトの状態変更が通知があるメソッドを呼び出したメソッドで起こったかもしれないので、このバグが必ずしもエラーを示すというわけではありません。 |
3539 </p> | 3665 </p> |
3540 | 3666 |
3541 | 3667 |
3542 <h3><a name="NP_SYNC_AND_NULL_CHECK_FIELD">NP: 同じフィールドでの同期化と null チェック (NP_SYNC_
AND_NULL_CHECK_FIELD)</a></h3> | 3668 <h3><a name="NP_SYNC_AND_NULL_CHECK_FIELD">NP: 同じフィールドでの同期化と null チェック (NP_SYNC_
AND_NULL_CHECK_FIELD)</a></h3> |
3543 | 3669 |
3544 | 3670 |
3545 <p> | 3671 <p> |
(...skipping 21 matching lines...) Expand all Loading... |
3567 直列化復元によって作成されるオブジェクトは1つのスレッドによってだけ到達可能です。 | 3693 直列化復元によって作成されるオブジェクトは1つのスレッドによってだけ到達可能です。 |
3568 したがって、<code>readObject</code> メソッドは同期化する必要がありません。 | 3694 したがって、<code>readObject</code> メソッドは同期化する必要がありません。 |
3569 <code>readObject</code> メソッドそのものが別のスレッドに見えるようになるオブジェクトの原因になっているなら非常に疑わしいコーディングスタ
イルの例です。 | 3695 <code>readObject</code> メソッドそのものが別のスレッドに見えるようになるオブジェクトの原因になっているなら非常に疑わしいコーディングスタ
イルの例です。 |
3570 </p> | 3696 </p> |
3571 | 3697 |
3572 | 3698 |
3573 <h3><a name="RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED">RV: putIfAbsent の戻り値は無視されて
putIfAbsent に渡した値は再利用された (RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED)</a></h3> | 3699 <h3><a name="RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED">RV: putIfAbsent の戻り値は無視されて
putIfAbsent に渡した値は再利用された (RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED)</a></h3> |
3574 | 3700 |
3575 | 3701 |
3576 <p> | 3702 <p> |
3577 <code>putIfAbsent</code> メソッドは、一般に1つの値が与えられたキー (非存在が成功するかどうかの第一の値) と関連することを確認するた
めに使われます。 | 3703 <code>putIfAbsent</code> メソッドは、1つの値が与えられたキー (非存在が成功するかどうかの第一の値) と関連することを確認するために使
われます。 |
3578 戻り値を無視して中で渡される値への参照を保持するなら、マップのキーと関連する1つではない値を保持する危険性を冒します。 | 3704 戻り値を無視して中で渡される値への参照を保持するなら、マップのキーと関連する1つではない値を保持する危険性を冒します。 |
3579 どれを使用するかが重要であり、マップに格納できないものを使用すると、プログラムは誤った振る舞いをします。 | 3705 どれを使用するかが重要であり、マップに格納できないものを使うとプログラムは誤った振る舞いをします。 |
3580 </p> | 3706 </p> |
3581 | 3707 |
3582 | 3708 |
3583 <h3><a name="RU_INVOKE_RUN">Ru: スレッドで run メソッドを呼び出している (RU_INVOKE_RUN)</a></h3> | 3709 <h3><a name="RU_INVOKE_RUN">Ru: スレッドで run メソッドを呼び出している (RU_INVOKE_RUN)</a></h3> |
3584 | 3710 |
3585 | 3711 |
3586 <p> | 3712 <p> |
3587 このメソッドは、スレッドで 明示的に <code>run</code> メソッドを呼び出しています。 | 3713 このメソッドは、スレッドで 明示的に <code>run</code> メソッドを呼び出しています。 |
3588 一般に、クラスは新しいスレッドで自己の <code>run</code> メソッドを呼び出してもらうために <code>Runnable</code> インタフ
ェースを実装します。 | 3714 一般的にクラスは新しいスレッドで自己の <code>run</code> メソッドを呼び出してもらうために <code>Runnable</code> インタフ
ェースを実装します。 |
3589 その場合は、<code>Thread.start()</code> を呼び出すのが正しいです。 | 3715 その場合は、<code>Thread.start()</code> を呼び出すのが正しいです。 |
3590 </p> | 3716 </p> |
3591 | 3717 |
3592 | 3718 |
3593 <h3><a name="SC_START_IN_CTOR">SC: Thread.start() を呼び出しているコンストラクタ (SC_START_IN_C
TOR)</a></h3> | 3719 <h3><a name="SC_START_IN_CTOR">SC: Thread.start() を呼び出しているコンストラクタ (SC_START_IN_C
TOR)</a></h3> |
3594 | 3720 |
3595 | 3721 |
3596 <p> | 3722 <p> |
3597 コンストラクタがスレッドを開始しています。クラスが拡張され、サブクラスが作られるなら間違っていそうです。 | 3723 コンストラクタがスレッドを開始しています。クラスが拡張され、サブクラスが作られるなら間違っていそうです。 |
3598 なぜなら、サブクラスのコンストラクタでスレッドが開始される前に、スーパークラスのスレッドが開始してしまうためです。 | 3724 なぜなら、サブクラスのコンストラクタでスレッドが開始される前にスーパークラスのスレッドが開始されてしまうためです。 |
3599 </p> | 3725 </p> |
3600 | 3726 |
3601 | 3727 |
3602 <h3><a name="SP_SPIN_ON_FIELD">SP: スピンロックをしているメソッド (SP_SPIN_ON_FIELD)</a></h3> | 3728 <h3><a name="SP_SPIN_ON_FIELD">SP: スピンロックをしているメソッド (SP_SPIN_ON_FIELD)</a></h3> |
3603 | 3729 |
3604 | 3730 |
3605 <p> | 3731 <p> |
3606 このメソッドは、フィールドを読み出すループで回り続けます。 | 3732 このメソッドは、フィールドを読み出すループで回り続けます。 |
3607 コンパイラがフィールドの読み出しをループの外に出すかもしれません。コードを無限ループに変えます。 | 3733 コンパイラがフィールドの読み出しをループの外に出すかもしれません。コードを無限ループに変えます。 |
3608 正しい同期化 (wait/notify を呼び出すように含む) を使うようにクラスを変更するべきです。 | 3734 正しい同期化 (wait/notify を呼び出すように含む) を使うようにクラスを変更するべきです。 |
3609 </p> | 3735 </p> |
3610 | 3736 |
3611 | 3737 |
3612 <h3><a name="STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE">STCAL: static Calendar の呼
び出し (STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE)</a></h3> | 3738 <h3><a name="STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE">STCAL: static Calendar の呼
び出し (STCAL_INVOKE_ON_STATIC_CALENDAR_INSTANCE)</a></h3> |
3613 | 3739 |
3614 | 3740 |
3615 <p> | 3741 <p> |
3616 たとえ JavaDoc にそれに関する手がかりがないとしても、Calendar はマルチスレッドでの使用は本質的に安全ではありません。 | 3742 たとえ JavaDoc にそれに関する手がかりがないとしても、Calendar はマルチスレッドでの使用は本質的に安全ではありません。 |
3617 ディテクタは、static フィールドから得られた Calendar のインスタンスの呼び出しを発見しました。 | 3743 ディテクタは、static フィールドから得られた Calendar のインスタンスの呼び出しを発見しました。 |
3618 これは疑わしく見えます。 | 3744 これは疑わしく見えます。 |
3619 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 | 3745 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 |
3620 </p> | 3746 </p> |
3621 | 3747 |
3622 | 3748 |
3623 <h3><a name="STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE">STCAL: static DateForm
at の呼び出し (STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE)</a></h3> | 3749 <h3><a name="STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE">STCAL: static DateForm
at の呼び出し (STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE)</a></h3> |
3624 | 3750 |
3625 | 3751 |
3626 <p> | 3752 <p> |
3627 JavaDoc に書かれているように、DateFormat はマルチスレッドでの使用は本質的に安全ではありません。 | 3753 JavaDoc に書かれているように DateFormat はマルチスレッドでの使用は本質的に安全ではありません。 |
3628 ディテクタは、static フィールドから得られた DateFormat のインスタンスの呼び出しを発見しました。 | 3754 ディテクタは、static フィールドから得られた DateFormat のインスタンスの呼び出しを発見しました。 |
3629 これは疑わしく見えます。 | 3755 これは疑わしく見えます。 |
3630 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 | 3756 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 |
3631 </p> | 3757 </p> |
3632 | 3758 |
3633 | 3759 |
3634 <h3><a name="STCAL_STATIC_CALENDAR_INSTANCE">STCAL: static Calendar フィールド (STCAL
_STATIC_CALENDAR_INSTANCE)</a></h3> | 3760 <h3><a name="STCAL_STATIC_CALENDAR_INSTANCE">STCAL: static Calendar フィールド (STCAL
_STATIC_CALENDAR_INSTANCE)</a></h3> |
3635 | 3761 |
3636 | 3762 |
3637 <p> | 3763 <p> |
3638 たとえ JavaDoc にそれに関する手がかりがないとしても、Calendar はマルチスレッドでの使用は本質的に安全でありません。 | 3764 たとえ JavaDoc にそれに関する手がかりがないとしても、Calendar はマルチスレッドでの使用は本質的に安全でありません。 |
3639 正しい同期化をしないでスレッド境界の向こうで1つのインスタンスを共有することは、アプリケーションの誤動作になります。 | 3765 正しい同期化をしないでスレッド境界の向こうで1つのインスタンスを共有することは、アプリケーションの誤動作になります。 |
3640 JDK 5.0に比べて JDK 1.4 のほうが問題が表面化するように思われ、おそらく sun.util.calendar.BaseCalendar.getCa
lendarDateFromFixedDate() の ArrayIndexOutOfBoundsExceptions や IndexOutOfBoundsEx
ceptions がランダムに発生します。 | 3766 JDK 5.0に比べて JDK 1.4 のほうが問題が表面化するように思われ、おそらく sun.util.calendar.BaseCalendar.getCa
lendarDateFromFixedDate() の ArrayIndexOutOfBoundsExceptions や IndexOutOfBoundsEx
ceptions がランダムに発生します。 |
3641 直列化問題も経験するかもしれません。インスタンスフィールドを使うことを推奨します。<br> | 3767 直列化問題も経験するかもしれません。インスタンスフィールドを使用することを推奨します。<br> |
3642 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 | 3768 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 |
3643 </p> | 3769 </p> |
3644 | 3770 |
3645 | 3771 |
3646 <h3><a name="STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE">STCAL: static DateFormat
(STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE)</a></h3> | 3772 <h3><a name="STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE">STCAL: static DateFormat
(STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE)</a></h3> |
3647 | 3773 |
3648 | 3774 |
3649 <p> | 3775 <p> |
3650 JavaDoc に書かれているように、DateFormat はマルチスレッドでの使用は本質的に安全ではありません。 | 3776 JavaDoc に書かれているように DateFormat はマルチスレッドでの使用は本質的に安全ではありません。 |
3651 正しい同期化をしないでスレッド境界の向こうで1つのインスタンスを共有することは、アプリケーションの誤動作になります。 | 3777 正しい同期化をしないでスレッド境界の向こうで1つのインスタンスを共有することは、アプリケーションの誤動作になります。 |
3652 JDK 5.0に比べて JDK 1.4 のほうが問題が表面化するように思われ、おそらく sun.util.calendar.BaseCalendar.getCa
lendarDateFromFixedDate() の ArrayIndexOutOfBoundsExceptions や IndexOutOfBoundsEx
ceptions がランダムに発生します。 | 3778 JDK 5.0に比べて JDK 1.4 のほうが問題が表面化するように思われ、おそらく sun.util.calendar.BaseCalendar.getCa
lendarDateFromFixedDate() の ArrayIndexOutOfBoundsExceptions や IndexOutOfBoundsEx
ceptions がランダムに発生します。 |
3653 直列化問題も経験するかもしれません。インスタンスフィールドを使うことを推奨します。<br> | 3779 直列化問題も経験するかもしれません。インスタンスフィールドを使用することを推奨します。<br> |
3654 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 | 3780 詳細については、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6231579">Sun
Bug #6231579</a> や <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=
6178997">Sun Bug #6178997</a> を参照してください。 |
3655 </p> | 3781 </p> |
3656 | 3782 |
3657 | 3783 |
3658 <h3><a name="SWL_SLEEP_WITH_LOCK_HELD">SWL: ロックを保持して Thread.sleep() を呼び出しているメソッド
(SWL_SLEEP_WITH_LOCK_HELD)</a></h3> | 3784 <h3><a name="SWL_SLEEP_WITH_LOCK_HELD">SWL: ロックを保持して Thread.sleep() を呼び出しているメソッド
(SWL_SLEEP_WITH_LOCK_HELD)</a></h3> |
3659 | 3785 |
3660 | 3786 |
3661 <p> | 3787 <p> |
3662 このメソッドは、ロックを保持して、<code>Thread.sleep()</code> を呼び出しています。 | 3788 このメソッドは、ロックを保持して、<code>Thread.sleep()</code> を呼び出しています。 |
3663 他のスレッドがロックを獲得するために待機しているかもしれないので、ひどい性能とスケーラビリティ、またはデッドロックになるかもしれません。 | 3789 他のスレッドがロックを獲得するために待機しているかもしれないので、ひどい性能とスケーラビリティ、またはデッドロックの原因になるかもしれません。 |
3664 ロックで <code>wait</code> メソッドを呼び出すことはかなり良い考えで、ロックを解除して他のスレッドが実行するのを許可します。 | 3790 ロックで <code>wait</code> メソッドを呼び出すことはかなり良い考えで、ロックを解除して他のスレッドが実行するのを許可します。 |
3665 </p> | 3791 </p> |
3666 | 3792 |
3667 | 3793 |
3668 <h3><a name="TLW_TWO_LOCK_WAIT">TLW: 2つ以上のロックを保持して wait メソッドを呼び出している (TLW_TWO_LO
CK_WAIT)</a></h3> | 3794 <h3><a name="TLW_TWO_LOCK_WAIT">TLW: 2つ以上のロックを保持して wait メソッドを呼び出している (TLW_TWO_LO
CK_WAIT)</a></h3> |
3669 | 3795 |
3670 | 3796 |
3671 <p> | 3797 <p> |
3672 2つ以上のロックを保持して、モニタで待機させるとデッドロックの原因になる場合があります。 | 3798 2つ以上のロックを保持して、モニタで待機させるとデッドロックを引き起こすことがあります。 |
3673 <code>wait</code> メソッドを呼び出すと、待機しているオブジェクトのロックを解除するだけで、その他のロックは解除しません。 | 3799 <code>wait</code> メソッドを呼び出すと、待機しているオブジェクトのロックを解除するだけで、その他のロックは解除しません。 |
3674 これは必ずしもバグではありませんが厳密に調べる価値があります。 | 3800 これは必ずしもバグではありませんが厳密に調べる価値があります。 |
3675 </p> | 3801 </p> |
3676 | 3802 |
3677 | 3803 |
3678 <h3><a name="UG_SYNC_SET_UNSYNC_GET">UG: 同期化していない get メソッド、同期化している set メソッド (UG_
SYNC_SET_UNSYNC_GET)</a></h3> | 3804 <h3><a name="UG_SYNC_SET_UNSYNC_GET">UG: 同期化していない get メソッド、同期化している set メソッド (UG_
SYNC_SET_UNSYNC_GET)</a></h3> |
3679 | 3805 |
3680 | 3806 |
3681 <p> | 3807 <p> |
3682 このクラスには類似した名前の get メソッドと set メソッドがあり、set メソッドは同期化していて、get メソッドは同期化していません。 | 3808 このクラスには類似した名前の get メソッドと set メソッドがあり、set メソッドは同期化していて、get メソッドは同期化していません。 |
3683 get メソッドの呼び出し元がオブジェクトの一貫した状態を必ずしも見るというわけではないので、実行時に間違った振る舞いになるかもしれません。 | 3809 get メソッドの呼び出し元がオブジェクトの一貫した状態を必ずしも見るというわけではないので、実行時に間違った振る舞いの原因になることがあります。 |
3684 get メソッドは同期化するべきです。 | 3810 get メソッドは同期化するべきです。 |
3685 </p> | 3811 </p> |
3686 | 3812 |
3687 | 3813 |
3688 <h3><a name="UL_UNRELEASED_LOCK">UL: すべての経路でロックが解除されないメソッド (UL_UNRELEASED_LOCK)<
/a></h3> | 3814 <h3><a name="UL_UNRELEASED_LOCK">UL: すべての経路でロックが解除されないメソッド (UL_UNRELEASED_LOCK)<
/a></h3> |
3689 | 3815 |
3690 | 3816 |
3691 <p> | 3817 <p> |
3692 このメソッドは、JSR-166(<code>java.util.concurrent</code>) のロックを獲得していますが、メソッドからのすべての経路で解
除していません。 | 3818 このメソッドは、JSR-166(<code>java.util.concurrent</code>) のロックを獲得していますが、メソッドからのすべての経路で解
除していません。 |
3693 一般に、JSR-166のロックを使用するための正しいイディオムは以下のようになります。 | 3819 一般的に JSR-166のロックを使用するための正しいイディオムは以下のようになります。 |
3694 </p> | 3820 </p> |
3695 <blockquote><pre> | 3821 <blockquote><pre> |
3696 Lock l = ...; | 3822 Lock l = ...; |
3697 l.lock(); | 3823 l.lock(); |
3698 try { | 3824 try { |
3699 // do something | 3825 // do something |
3700 } finally { | 3826 } finally { |
3701 l.unlock(); | 3827 l.unlock(); |
3702 } | 3828 } |
3703 </pre></blockquote> | 3829 </pre></blockquote> |
3704 | 3830 |
3705 | 3831 |
3706 <h3><a name="UL_UNRELEASED_LOCK_EXCEPTION_PATH">UL: すべての例外経路でロックが解除されないメソッド (UL_
UNRELEASED_LOCK_EXCEPTION_PATH)</a></h3> | 3832 <h3><a name="UL_UNRELEASED_LOCK_EXCEPTION_PATH">UL: すべての例外経路でロックが解除されないメソッド (UL_
UNRELEASED_LOCK_EXCEPTION_PATH)</a></h3> |
3707 | 3833 |
3708 | 3834 |
3709 <p> | 3835 <p> |
3710 このメソッドは、JSR-166(<code>java.util.concurrent</code>) のロックを獲得していますが、メソッドからのすべての例外経路
で解除していません。 | 3836 このメソッドは、JSR-166(<code>java.util.concurrent</code>) のロックを獲得していますが、メソッドからのすべての例外経路
で解除していません。 |
3711 一般に、JSR-166のロックを使用するための正しいイディオムは以下のようになります。 | 3837 一般的に JSR-166のロックを使用するための正しいイディオムは以下のようになります。 |
3712 </p> | 3838 </p> |
3713 <blockquote><pre> | 3839 <blockquote><pre> |
3714 Lock l = ...; | 3840 Lock l = ...; |
3715 l.lock(); | 3841 l.lock(); |
3716 try { | 3842 try { |
3717 // do something | 3843 // do something |
3718 } finally { | 3844 } finally { |
3719 l.unlock(); | 3845 l.unlock(); |
3720 } | 3846 } |
3721 </pre></blockquote> | 3847 </pre></blockquote> |
3722 | 3848 |
3723 | 3849 |
3724 <h3><a name="UW_UNCOND_WAIT">UW: wait メソッドの無条件呼び出し (UW_UNCOND_WAIT)</a></h3> | 3850 <h3><a name="UW_UNCOND_WAIT">UW: wait メソッドの無条件呼び出し (UW_UNCOND_WAIT)</a></h3> |
3725 | 3851 |
3726 | 3852 |
3727 <p> | 3853 <p> |
3728 このメソッドには条件制御フローによってガードされない <code>java.lang.Object.wait()</code> の呼び出しがあります。 | 3854 このメソッドには条件制御フローによってガードされない <code>java.lang.Object.wait()</code> の呼び出しがあります。 |
3729 このコードは、<code>wait</code> メソッドを呼び出す前に待機するつもりだった条件がすでに満たされていないことを確かめるべきです。 | 3855 このコードは、<code>wait</code> メソッドを呼び出す前に待機するつもりだった条件が既に満たされていないことを確かめるべきです。 |
3730 どんな前の通知も無視されます。 | 3856 どんな前の通知も無視されます。 |
3731 </p> | 3857 </p> |
3732 | 3858 |
3733 | 3859 |
3734 <h3><a name="VO_VOLATILE_INCREMENT">VO: volatile フィールドへのインクリメントはアトミックではない (VO_VO
LATILE_INCREMENT)</a></h3> | 3860 <h3><a name="VO_VOLATILE_INCREMENT">VO: volatile フィールドへのインクリメントはアトミックではない (VO_VO
LATILE_INCREMENT)</a></h3> |
3735 | 3861 |
3736 | 3862 |
3737 <p> | 3863 <p> |
3738 このコードは、volatile フィールドをインクリメントしています。 | 3864 このコードは、volatile フィールドをインクリメントしています。 |
3739 volatile フィールドのインクリメントはアトミックではありません。 | 3865 volatile フィールドのインクリメントはアトミックではありません。 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3813 このメソッドは、ループの中にない <code>java.lang.Object.wait()</code> を呼び出しています。 | 3939 このメソッドは、ループの中にない <code>java.lang.Object.wait()</code> を呼び出しています。 |
3814 モニタが複数の条件のために使われるなら、呼び出し元が待機するつもりだった条件は実際には発生しないかもしれません。 | 3940 モニタが複数の条件のために使われるなら、呼び出し元が待機するつもりだった条件は実際には発生しないかもしれません。 |
3815 </p> | 3941 </p> |
3816 | 3942 |
3817 | 3943 |
3818 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED">Bx: プリミティブ値がボクシングされて、すぐにアンボクシングされる (
BX_BOXING_IMMEDIATELY_UNBOXED)</a></h3> | 3944 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED">Bx: プリミティブ値がボクシングされて、すぐにアンボクシングされる (
BX_BOXING_IMMEDIATELY_UNBOXED)</a></h3> |
3819 | 3945 |
3820 | 3946 |
3821 <p> | 3947 <p> |
3822 プリミティブ値がボクシングされて、すぐにアンボクシングされます。 | 3948 プリミティブ値がボクシングされて、すぐにアンボクシングされます。 |
3823 おそらくアンボクシングされた値が必要な場所で、手動でボクシングをしているためです。 | 3949 おそらくアンボクシングされた値が必要な場所で手動でボクシングをしているためです。 |
3824 その結果、コンパイラにボクシングの機能を取り消すことを強制しています。 | 3950 その結果、コンパイラにボクシングの機能を取り消すことを強制しています。 |
3825 </p> | 3951 </p> |
3826 | 3952 |
3827 | 3953 |
3828 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION">Bx: プリミティブ値がプリミテ
ィブ型の型変換をするためにボクシングされて、アンボクシングされる (BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERC
ION)</a></h3> | 3954 <h3><a name="BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION">Bx: プリミティブ値がプリミテ
ィブ型の型変換をするためにボクシングされて、アンボクシングされる (BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERC
ION)</a></h3> |
3829 | 3955 |
3830 | 3956 |
3831 <p> | 3957 <p> |
3832 プリミティブ値がコンストラクタでボクシングされて、すぐに異なるプリミティブ型に変換されます (たとえば <code>new Double(d).intValue
()</code>)。 | 3958 プリミティブ値がコンストラクタでボクシングされて、すぐに異なるプリミティブ型に変換されます (たとえば <code>new Double(d).intValue
()</code>)。 |
3833 直接プリミティブ型の型変換を実行してください (たとえば <code>(int) d</code>)。 | 3959 直接プリミティブ型の型変換を実行してください (たとえば <code>(int) d</code>)。 |
3834 </p> | 3960 </p> |
3835 | 3961 |
3836 | 3962 |
| 3963 <h3><a name="BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR">Bx: プリミティブ値が3項演算子のためにア
ンボクシングされて、型変換される (BX_UNBOXED_AND_COERCED_FOR_TERNARY_OPERATOR)</a></h3> |
| 3964 |
| 3965 |
| 3966 <p> |
| 3967 ラップされたプリミティブ値は、3項演算子 (<code> b ? e1 : e2</code>) の評価の一部として、別のプリミティブ型にアンボクシングされて変
換されます。 |
| 3968 Java 言語仕様では、<code>e1</code> と <code>e2</code> がラップされた数値なら値はアンボクシングされ、共通の型へと変換/型変
換されます |
| 3969 (たとえば、<code>e1</code> が <code>Integer</code> で、<code>e2</code> が <code>Float</co
de> なら <code>e1</code> はアンボクシング (<code>int</code> に変換) され、<code>float</code> に変換
され、ボクシング (<code>Float</code> に変換) されます)。 |
| 3970 JLS セクション15.25を参照してください。 |
| 3971 </p> |
| 3972 |
| 3973 |
3837 <h3><a name="BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: ボクシングされた値がアンボクシングされて、すぐに再ボクシング
される (BX_UNBOXING_IMMEDIATELY_REBOXED)</a></h3> | 3974 <h3><a name="BX_UNBOXING_IMMEDIATELY_REBOXED">Bx: ボクシングされた値がアンボクシングされて、すぐに再ボクシング
される (BX_UNBOXING_IMMEDIATELY_REBOXED)</a></h3> |
3838 | 3975 |
3839 | 3976 |
3840 <p> | 3977 <p> |
3841 ボクシングされた値がアンボクシングされて、すぐに再ボクシングされます。 | 3978 ボクシングされた値がアンボクシングされて、すぐに再ボクシングされます。 |
3842 </p> | 3979 </p> |
3843 | 3980 |
3844 | 3981 |
| 3982 <h3><a name="DM_BOXED_PRIMITIVE_FOR_COMPARE">Bx: プリミティブが比較でボクシングされている (DM_BOXED_
PRIMITIVE_FOR_COMPARE)</a></h3> |
| 3983 |
| 3984 |
| 3985 <p> |
| 3986 ボクシングされたプリミティブが単に compareTo メソッドを呼び出すために作られています。 |
| 3987 直接プリミティブで働く static compare メソッド (double と float は Java 1.4から、他のプリミティブ型は Java 1.7
から) を使うほうがより効率的です。 |
| 3988 </p> |
| 3989 |
| 3990 |
3845 <h3><a name="DM_BOXED_PRIMITIVE_FOR_PARSING">Bx: ボクシング/アンボクシングはプリミティブを解析する (DM_B
OXED_PRIMITIVE_FOR_PARSING)</a></h3> | 3991 <h3><a name="DM_BOXED_PRIMITIVE_FOR_PARSING">Bx: ボクシング/アンボクシングはプリミティブを解析する (DM_B
OXED_PRIMITIVE_FOR_PARSING)</a></h3> |
3846 | 3992 |
3847 | 3993 |
3848 <p> | 3994 <p> |
3849 ボックス化されたプリミティブは、String から生成されていて、アンボックス化されたプリミティブ値を抽出します。 | 3995 ボックス化されたプリミティブは、String から生成されていて、アンボックス化されたプリミティブ値を抽出します。 |
3850 static parseXXX メソッドを呼び出す方が効率的です。 | 3996 static parseXXX メソッドを呼び出す方が効率的です。 |
3851 </p> | 3997 </p> |
3852 | 3998 |
3853 | 3999 |
3854 <h3><a name="DM_BOXED_PRIMITIVE_TOSTRING">Bx: toString メソッドを呼び出すためにプリミティブ型のラッパクラ
スのインスタンスを作成している (DM_BOXED_PRIMITIVE_TOSTRING)</a></h3> | 4000 <h3><a name="DM_BOXED_PRIMITIVE_TOSTRING">Bx: toString メソッドを呼び出すためにプリミティブ型のラッパクラ
スのインスタンスを作成している (DM_BOXED_PRIMITIVE_TOSTRING)</a></h3> |
3855 | 4001 |
3856 | 4002 |
3857 <p> | 4003 <p> |
3858 <code>toString</code> メソッドを呼び出すために、プリミティブ型のラッパクラスのインスタンスを作成しています。 | 4004 <code>toString</code> メソッドを呼び出すためにプリミティブ型のラッパクラスのインスタンスを作成しています。 |
3859 それよりもプリミティブ値を引数にとる static な <code>toString</code> メソッドを使用したほうが効率的です。 | 4005 それよりもプリミティブ値を引数にとる static な <code>toString</code> メソッドを使用したほうが効率的です。 |
3860 </p> | 4006 </p> |
3861 <table> | 4007 <table> |
3862 <tr><th>置換前</th><th>置換後</th></tr> | 4008 <tr><th>置換前</th><th>置換後</th></tr> |
3863 <tr><td>new Integer(1).toString()</td><td>Integer.toString(1)</td></tr> | 4009 <tr><td>new Integer(1).toString()</td><td>Integer.toString(1)</td></tr> |
3864 <tr><td>new Long(1).toString()</td><td>Long.toString(1)</td></tr> | 4010 <tr><td>new Long(1).toString()</td><td>Long.toString(1)</td></tr> |
3865 <tr><td>new Float(1.0).toString()</td><td>Float.toString(1.0)</td></tr> | 4011 <tr><td>new Float(1.0).toString()</td><td>Float.toString(1.0)</td></tr> |
3866 <tr><td>new Double(1.0).toString()</td><td>Double.toString(1.0)</td></tr> | 4012 <tr><td>new Double(1.0).toString()</td><td>Double.toString(1.0)</td></tr> |
3867 <tr><td>new Byte(1).toString()</td><td>Byte.toString(1)</td></tr> | 4013 <tr><td>new Byte(1).toString()</td><td>Byte.toString(1)</td></tr> |
3868 <tr><td>new Short(1).toString()</td><td>Short.toString(1)</td></tr> | 4014 <tr><td>new Short(1).toString()</td><td>Short.toString(1)</td></tr> |
3869 <tr><td>new Boolean(true).toString()</td><td>Boolean.toString(true)</td></tr> | 4015 <tr><td>new Boolean(true).toString()</td><td>Boolean.toString(true)</td></tr> |
3870 </table> | 4016 </table> |
3871 | 4017 |
3872 | 4018 |
3873 <h3><a name="DM_FP_NUMBER_CTOR">Bx: 効率が悪い浮動小数点 Number コンストラクタを呼び出しているメソッド (DM_FP
_NUMBER_CTOR)</a></h3> | 4019 <h3><a name="DM_FP_NUMBER_CTOR">Bx: 効率が悪い浮動小数点 Number コンストラクタを呼び出しているメソッド (DM_FP
_NUMBER_CTOR)</a></h3> |
3874 | 4020 |
3875 | 4021 |
3876 <p> | 4022 <p> |
3877 <code>new Double(double)</code> の使用は、常に新しいブジェクトになることが保証されています。 | 4023 <code>new Double(double)</code> の使用は、常に新しいブジェクトになることが保証されています。 |
3878 これに対して、<code>Double.valueOf(double)</code> は、コンパイラ、クラスライブラリ、Java 仮想マシンで値がキャッシュされ
ます。 | 4024 これに対して、<code>Double.valueOf(double)</code> は、コンパイラ、クラスライブラリ、Java 仮想マシンで値がキャッシュされ
ます。 |
3879 キャッシュに格納された値を使うことはインスタンス生成を回避し、コードはより高速になります。 | 4025 キャッシュに格納された値を使用することはインスタンス生成を回避し、コードはより高速になります。 |
3880 </p> | 4026 </p> |
3881 <p> | 4027 <p> |
3882 クラスが J2SE 5.0より前の Java 仮想マシンとの互換性が不要なら、オートボクシングか <code>Double</code>、<code>Float
</code> の <code>valueOf</code> メソッドを使用してください。 | 4028 クラスが J2SE 5.0より前の Java 仮想マシンとの互換性が不要なら、オートボクシングか <code>Double</code>、<code>Float
</code> の <code>valueOf</code> メソッドを使用してください。 |
3883 </p> | 4029 </p> |
3884 | 4030 |
3885 | 4031 |
3886 <h3><a name="DM_NUMBER_CTOR">Bx: 効率が悪い Number コンストラクタを呼び出しているメソッド (DM_NUMBER_CTO
R)</a></h3> | 4032 <h3><a name="DM_NUMBER_CTOR">Bx: 効率が悪い Number コンストラクタを呼び出しているメソッド (DM_NUMBER_CTO
R)</a></h3> |
3887 | 4033 |
3888 | 4034 |
3889 <p> | 4035 <p> |
3890 <code>new Integer(int)</code> の使用は、常に新しいブジェクトになることが保証されています。 | 4036 <code>new Integer(int)</code> の使用は、常に新しいブジェクトになることが保証されています。 |
3891 これに対して、<code>Integer.valueOf(int)</code> は、コンパイラ、クラスライブラリ、Java 仮想マシンで値がキャッシュされます
。 | 4037 これに対して、<code>Integer.valueOf(int)</code> は、コンパイラ、クラスライブラリ、Java 仮想マシンで値がキャッシュされます
。 |
3892 キャッシュに格納された値を使うことはインスタンスの作成を回避し、コードはより高速になります。 | 4038 キャッシュに格納された値を使用することはインスタンスの作成を回避し、コードはより高速になります。 |
3893 </p> | 4039 </p> |
3894 <p> | 4040 <p> |
3895 -128から127までの値は対応するキャッシュされたインスタンスを持つことが保証されています。 | 4041 -128から127までの値は対応するキャッシュされたインスタンスを持つことが保証されています。 |
3896 そして、<code>valueOf</code> メソッドの使用は、コンストラクタを使用するより約3.5倍高速です。 | 4042 そして、<code>valueOf</code> メソッドの使用は、コンストラクタを使用するより約3.5倍高速です。 |
3897 定数範囲外の値は、両方のスタイルの性能は同じです。 | 4043 定数範囲外の値は、両方のスタイルの性能は同じです。 |
3898 </p> | 4044 </p> |
3899 <p> | 4045 <p> |
3900 クラスが J2SE 5.0より前の Java 仮想マシンとの互換性が不要なら、<code>Long</code>、<code>Integer</code>、<c
ode>Short</code>、<code>Character</code>、<code>Byte</code> のインスタンスを作成するときは、オートボクシ
ングか <code>valueOf</code> メソッドを使用してください。 | 4046 クラスが J2SE 5.0より前の Java 仮想マシンとの互換性が不要なら、<code>Long</code>、<code>Integer</code>、<c
ode>Short</code>、<code>Character</code>、<code>Byte</code> のインスタンスを作成するときは、オートボクシ
ングか <code>valueOf</code> メソッドを使用してください。 |
3901 </p> | 4047 </p> |
3902 | 4048 |
3903 | 4049 |
3904 <h3><a name="DMI_BLOCKING_METHODS_ON_URL">Dm: URL の equals メソッドと hashCode メソッドはブ
ロックする (DMI_BLOCKING_METHODS_ON_URL)</a></h3> | 4050 <h3><a name="DMI_BLOCKING_METHODS_ON_URL">Dm: URL の equals メソッドと hashCode メソッドはブ
ロックする (DMI_BLOCKING_METHODS_ON_URL)</a></h3> |
3905 | 4051 |
3906 | 4052 |
3907 <p> | 4053 <p> |
3908 URL の <code>equals</code> メソッドと <code>hashCode</code> メソッドは、ドメイン名の解決を行うので、ひどい性能に
なる可能性があります。<br> | 4054 URL の <code>equals</code> メソッドと <code>hashCode</code> メソッドは、ドメイン名の解決を行うので、ひどい性能に
なる可能性があります。<br> |
3909 詳細は、<a href="http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hash
code-make.html">http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-h
ashcode-make.html</a> を参照してください。<br> | 4055 詳細は、<a href="http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hash
code-make.html">http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-h
ashcode-make.html</a> を参照してください。<br> |
3910 その代わりに <code>java.net.URI</code> を使うことを検討してください。 | 4056 その代わりに <code>java.net.URI</code> を使用することを検討してください。 |
3911 </p> | 4057 </p> |
3912 | 4058 |
3913 | 4059 |
3914 <h3><a name="DMI_COLLECTION_OF_URLS">Dm: URL の Map や Set はひどい性能になる可能性がある (DMI_CO
LLECTION_OF_URLS)</a></h3> | 4060 <h3><a name="DMI_COLLECTION_OF_URLS">Dm: URL の Map や Set はひどい性能になる (DMI_COLLECTI
ON_OF_URLS)</a></h3> |
3915 | 4061 |
3916 | 4062 |
3917 <p> | 4063 <p> |
3918 このメソッドまたはフィールドは、URL の <code>Map</code> か <code>Set</code> を使用しています。 | 4064 このメソッドまたはフィールドは、URL の <code>Map</code> か <code>Set</code> を使用しています。 |
3919 URL の <code>equals</code> と <code>hashCode</code> は、ドメイン名の解決を行うので、ひどい性能になる可能性があり
ます。<br> | 4065 URL の <code>equals</code> と <code>hashCode</code> は、ドメイン名の解決を行うので、ひどい性能になります。<br
> |
3920 詳細は、<a href="http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hash
code-make.html">http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-h
ashcode-make.html</a> を参照してください。<br> | 4066 詳細は、<a href="http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-hash
code-make.html">http://michaelscharf.blogspot.com/2006/11/javaneturlequals-and-h
ashcode-make.html</a> を参照してください。<br> |
3921 その代わりに <code>java.net.URI</code> を使うことをを検討してください。 | 4067 その代わりに <code>java.net.URI</code> を使用することを検討してください。 |
3922 </p> | 4068 </p> |
3923 | 4069 |
3924 | 4070 |
3925 <h3><a name="DM_BOOLEAN_CTOR">Dm: 効率が悪い Boolean コンストラクタを呼び出しているメソッド (DM_BOOLEAN_
CTOR)</a></h3> | 4071 <h3><a name="DM_BOOLEAN_CTOR">Dm: 効率が悪い Boolean コンストラクタを呼び出しているメソッド (DM_BOOLEAN_
CTOR)</a></h3> |
3926 | 4072 |
3927 | 4073 |
3928 <p> | 4074 <p> |
3929 <code>java.lang.Boolean</code> の新しいインスタンスを作成するとメモリを浪費します。 | 4075 <code>java.lang.Boolean</code> の新しいインスタンスを作成するとメモリを浪費します。 |
3930 <code>Boolean</code> オブジェクトは不変で、2つの有効な値 (<code>Boolean.TRUE</code> と <code>Boole
an.FALSE</code>) があります。 | 4076 <code>Boolean</code> オブジェクトは不変で、2つの有用な値 (<code>Boolean.TRUE</code> と <code>Boole
an.FALSE</code>) があります。 |
3931 その代わりに <code>Boolean</code> オブジェクトを作成するために、<code>Boolean.valueOf</code> メソッド (また
は J2SE 5.0 のオートボクシング) を使用してください。 | 4077 その代わりに <code>Boolean.valueOf</code> メソッド (または J2SE 5.0 のオートボクシング) を使用して <code>Bo
olean</code> オブジェクトを作成してください。 |
3932 </p> | 4078 </p> |
3933 | 4079 |
3934 | 4080 |
3935 <h3><a name="DM_GC">Dm: 明示的なガベージコレクション (DM_GC)</a></h3> | 4081 <h3><a name="DM_GC">Dm: 明示的なガベージコレクション (DM_GC)</a></h3> |
3936 | 4082 |
3937 | 4083 |
3938 <p> | 4084 <p> |
3939 明示的にガベージコレクションを呼び出しています。ベンチマークの特定の用途を除いて非常に疑わしいです。 | 4085 明示的にガベージコレクションを呼び出しています。ベンチマークの特定の用途を除いて非常に疑わしいです。 |
3940 </p> | 4086 </p> |
3941 <p> | 4087 <p> |
3942 過去に、<code>close</code> メソッドや <code>finalize</code> メソッドでガベージコレクタを明示的に呼び出していた状況は、
巨大なパフォーマンスブラックホールの原因となりました。 | 4088 過去に、<code>close</code> メソッドや <code>finalize</code> メソッドでガベージコレクタを明示的に呼び出していた状況は、
巨大なパフォーマンスブラックホールの原因となりました。 |
3943 ガベージコレクションは、高くつく可能性があります。何百、何千ものガベージコレクションを強制する状況は、システムの停滞をもたらすでしょう。 | 4089 ガベージコレクションは高くつきます。何百、何千ものガベージコレクションを強制する状況は、システムの停滞をもたらすでしょう。 |
3944 </p> | 4090 </p> |
3945 | 4091 |
3946 | 4092 |
3947 <h3><a name="DM_NEW_FOR_GETCLASS">Dm: クラスオブジェクトを得るためだけにインスタンスを作成しているメソッド (DM_NEW
_FOR_GETCLASS)</a></h3> | 4093 <h3><a name="DM_NEW_FOR_GETCLASS">Dm: クラスオブジェクトを得るためだけにインスタンスを作成しているメソッド (DM_NEW
_FOR_GETCLASS)</a></h3> |
3948 | 4094 |
3949 | 4095 |
3950 <p> | 4096 <p> |
3951 メソッドは、クラスオブジェクトを得るために、インスタンスを生成して <code>getClass</code> メソッドを呼び出しています。 | 4097 メソッドは、クラスオブジェクトを得るためにインスタンスを生成して <code>getClass</code> メソッドを呼び出しています。 |
3952 クラスリテラル (<code>Foo.class</code>) を使うほうが簡単です。 | 4098 クラスリテラル (<code>Foo.class</code>) を使うほうが簡単です。 |
3953 </p> | 4099 </p> |
3954 | 4100 |
3955 | 4101 |
3956 <h3><a name="DM_NEXTINT_VIA_NEXTDOUBLE">Dm: 整数の乱数を生成するためには nextDouble メソッド ではなく
nextInt メソッドを使用する (DM_NEXTINT_VIA_NEXTDOUBLE)</a></h3> | 4102 <h3><a name="DM_NEXTINT_VIA_NEXTDOUBLE">Dm: 整数の乱数を生成するためには nextDouble メソッド ではなく
nextInt メソッドを使用する (DM_NEXTINT_VIA_NEXTDOUBLE)</a></h3> |
3957 | 4103 |
3958 | 4104 |
3959 <p> | 4105 <p> |
3960 <code>java.util.Random</code> のインスタンス <code>r</code> で、<code>0</code> から <code>n
-1</code> の乱数を生成したいのであれば、<code>(int)(r.nextDouble() * n)</code> ではなく <code>r.nex
tInt(n)</code> を使用します。 | 4106 <code>java.util.Random</code> のインスタンス <code>r</code> で、<code>0</code> から <code>n
-1</code> の乱数を生成したいのであれば、<code>(int)(r.nextDouble() * n)</code> ではなく <code>r.nex
tInt(n)</code> を使用します。 |
3961 </p> | 4107 </p> |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4000 <p> | 4146 <p> |
4001 巨大な文字列定数が複数のクラスファイルにわたって複製されています。 | 4147 巨大な文字列定数が複数のクラスファイルにわたって複製されています。 |
4002 final フィールドが文字列定数で初期化され、Java 言語によって他のクラスからの final フィールドへのすべての参照がクラスファイルにインライン化され
るからです。 | 4148 final フィールドが文字列定数で初期化され、Java 言語によって他のクラスからの final フィールドへのすべての参照がクラスファイルにインライン化され
るからです。 |
4003 </p> | 4149 </p> |
4004 <p> | 4150 <p> |
4005 JDK はこのバグを解決してサイズを1MB減らすことができました。<br> | 4151 JDK はこのバグを解決してサイズを1MB減らすことができました。<br> |
4006 詳細は、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6447475">JDK bug
6447475</a> を参照してください。 | 4152 詳細は、<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6447475">JDK bug
6447475</a> を参照してください。 |
4007 </p> | 4153 </p> |
4008 | 4154 |
4009 | 4155 |
4010 <h3><a name="IIO_INEFFICIENT_INDEX_OF">IIO: String.indexOf(String) の非効率的な使用 (IIO
_INEFFICIENT_INDEX_OF)</a></h3> | |
4011 | |
4012 | |
4013 <p> | |
4014 このコードは、String.indexOf() に長さ1の文字列定数を渡しています。String.indexOf() の整数実装を使うほうが効率的です。 | |
4015 たとえば、<code>myString.indexOf(".") の代わりに <code>myString.indexOf('.')</code> を呼び出しま
す。</code> | |
4016 </p> | |
4017 | |
4018 | |
4019 <h3><a name="IIO_INEFFICIENT_LAST_INDEX_OF">IIO: String.lastIndexOf(String) の非効率
的な使用 (IIO_INEFFICIENT_LAST_INDEX_OF)</a></h3> | |
4020 | |
4021 | |
4022 <p> | |
4023 このコードは、String.lastIndexOf() に長さ1の文字列定数を渡しています。String.lastIndexOf() の整数実装を使うほうが効率
的です。 | |
4024 たとえば、<code>myString.lastIndexOf(".") の代わりに <code>myString.lastIndexOf('.')</code
> を呼び出します。</code> | |
4025 </p> | |
4026 | |
4027 | |
4028 <h3><a name="ITA_INEFFICIENT_TO_ARRAY">ITA: 長さが0の配列の引数で toArray メソッドを使用しているメソッド
(ITA_INEFFICIENT_TO_ARRAY)</a></h3> | |
4029 | |
4030 | |
4031 <p> | |
4032 このメソッドは、Collection 派生クラスの </code>toArray</code> メソッドを使用して長さが0の配列の引数を渡しています。 | |
4033 <code>myCollection.toArray(new Foo[myCollection.size()])</code> を使用するほうがより効率的です。 | |
4034 渡される配列がコレクションの要素のすべてを格納できるくらいの大きさなら、データが読み込まれて、そのまま返されます。 | |
4035 これは、結果として返す2番目の配列 (リフレクションによって) を作成する必要を回避します。 | |
4036 </p> | |
4037 | |
4038 | |
4039 <h3><a name="SBSC_USE_STRINGBUFFER_CONCATENATION">SBSC: ループの中で + を使用して文字列を連結している
メソッド (SBSC_USE_STRINGBUFFER_CONCATENATION)</a></h3> | 4156 <h3><a name="SBSC_USE_STRINGBUFFER_CONCATENATION">SBSC: ループの中で + を使用して文字列を連結している
メソッド (SBSC_USE_STRINGBUFFER_CONCATENATION)</a></h3> |
4040 | 4157 |
4041 | 4158 |
4042 <p> | 4159 <p> |
4043 このメソッドは、ループの中で + を使用して <code>String</code> を構築していると思われます。 | 4160 このメソッドは、ループの中で + を使用して <code>String</code> を構築していると思われます。 |
4044 各々の繰り返しにおいて、<code>String</code> は <code>StringBuffer</code>/<code>StringBuilder<
/code> に変換、追加され、<code>String</code> へ変換されます。 | 4161 各々の繰り返しにおいて、<code>String</code> は <code>StringBuffer</code>/<code>StringBuilder<
/code> に変換、追加され、<code>String</code> へ変換されます。 |
4045 各々の繰り返しで文字列が再コピーされ、増大すると繰り返しの数で二次コストの原因になる可能性があります。 | 4162 各々の繰り返しで文字列が再コピーされ、増大すると繰り返しの数で二次コストの原因になる可能性があります。 |
4046 </p> | 4163 </p> |
4047 <p> | 4164 <p> |
4048 明示的に、<code>StringBuffer</code> (または J2SE 5.0の <code>StringBuilder</code>) を使うことで
、より良い性能を得られるかもしれません。 | 4165 <code>StringBuffer</code> (または J2SE 5.0の <code>StringBuilder</code>) を明示的に使うとより良
い性能を得られます。 |
4049 </p> | 4166 </p> |
4050 <p> | 4167 <p> |
4051 たとえば、 | 4168 たとえば、 |
4052 </p> | 4169 </p> |
4053 <blockquote><pre> | 4170 <blockquote><pre> |
4054 // This is bad | 4171 // This is bad |
4055 String s = ""; | 4172 String s = ""; |
4056 for (int i = 0; i < field.length; ++i) { | 4173 for (int i = 0; i < field.length; ++i) { |
4057 s = s + field[i]; | 4174 s = s + field[i]; |
4058 } | 4175 } |
4059 | 4176 |
4060 // This is better | 4177 // This is better |
4061 StringBuffer buf = new StringBuffer(); | 4178 StringBuffer buf = new StringBuffer(); |
4062 for (int i = 0; i < field.length; ++i) { | 4179 for (int i = 0; i < field.length; ++i) { |
4063 buf.append(field[i]); | 4180 buf.append(field[i]); |
4064 } | 4181 } |
4065 String s = buf.toString(); | 4182 String s = buf.toString(); |
4066 </pre></blockquote> | 4183 </pre></blockquote> |
4067 | 4184 |
4068 | 4185 |
4069 <h3><a name="SIC_INNER_SHOULD_BE_STATIC">SIC: static 内部クラスにすべき (SIC_INNER_SHOULD
_BE_STATIC)</a></h3> | 4186 <h3><a name="SIC_INNER_SHOULD_BE_STATIC">SIC: static 内部クラスにすべき (SIC_INNER_SHOULD
_BE_STATIC)</a></h3> |
4070 | 4187 |
4071 | 4188 |
4072 <p> | 4189 <p> |
4073 このクラスは内部クラスなのにそれを作成したオブジェクトへの埋め込まれた参照を使用していません。 | 4190 このクラスは内部クラスなのにそれを作成したオブジェクトへの埋め込まれた参照を使用していません。 |
4074 この参照はより大きなクラスのインスタンスを作成して、必要以上に長い間作成オブジェクトへの参照を存続しておくかもしれません。 | 4191 この参照はより大きなクラスのインスタンスを作成して、必要以上に作成オブジェクトへの参照を存続しておくことがあります。 |
4075 できれば、クラスは static にすべきです。 | 4192 できれば、クラスは static にすべきです。 |
4076 </p> | 4193 </p> |
4077 | 4194 |
4078 | 4195 |
4079 <h3><a name="SIC_INNER_SHOULD_BE_STATIC_ANON">SIC: 名前付き static 内部クラスにリファクタリングできる
かもしれない (SIC_INNER_SHOULD_BE_STATIC_ANON)</a></h3> | 4196 <h3><a name="SIC_INNER_SHOULD_BE_STATIC_ANON">SIC: 名前付き static 内部クラスにリファクタリングできる
かもしれない (SIC_INNER_SHOULD_BE_STATIC_ANON)</a></h3> |
4080 | 4197 |
4081 | 4198 |
4082 <p> | 4199 <p> |
4083 このクラスは内部クラスなのにそれを作成したオブジェクトへの埋め込まれた参照を使用していません。 | 4200 このクラスは内部クラスなのにそれを作成したオブジェクトへの埋め込まれた参照を使用していません。 |
4084 この参照はより大きなクラスのインスタンスを作成して、必要以上に長く作成オブジェクトへの参照を存続しておくかもしれません。 | 4201 この参照はより大きなクラスのインスタンスを作成して、必要以上に作成オブジェクトへの参照を存続しておくことがあります。 |
4085 できれば、クラスは static 内部クラスにすべきです。 | 4202 できれば、クラスは static 内部クラスにすべきです。 |
4086 無名内部クラスは static にできないので、名前付き内部クラスにリファクタリングする必要があります。 | 4203 無名内部クラスは static にできないので、名前付き内部クラスにリファクタリングする必要があります。 |
4087 </p> | 4204 </p> |
4088 | 4205 |
4089 | 4206 |
4090 <h3><a name="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS">SIC: static 内部クラスにリファクタリングでき
るかもしれない (SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS)</a></h3> | 4207 <h3><a name="SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS">SIC: static 内部クラスにリファクタリングでき
るかもしれない (SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS)</a></h3> |
4091 | 4208 |
4092 | 4209 |
4093 <p> | 4210 <p> |
4094 このクラスは内部クラスなのにそれを作成したオブジェクトへの埋め込まれた参照を使用していません。 | 4211 このクラスは内部クラスなのにそれを作成したオブジェクトへの埋め込まれた参照を使用していません。 |
(...skipping 10 matching lines...) Expand all Loading... |
4105 このクラスにはコンパイル時に静的な値に初期化されるインスタンス final フィールドがあります。 | 4222 このクラスにはコンパイル時に静的な値に初期化されるインスタンス final フィールドがあります。 |
4106 static フィールドにすることを検討してください。 | 4223 static フィールドにすることを検討してください。 |
4107 </p> | 4224 </p> |
4108 | 4225 |
4109 | 4226 |
4110 <h3><a name="UM_UNNECESSARY_MATH">UM: 定数値で Math クラスの static メソッドを呼び出しているメソッド (UM
_UNNECESSARY_MATH)</a></h3> | 4227 <h3><a name="UM_UNNECESSARY_MATH">UM: 定数値で Math クラスの static メソッドを呼び出しているメソッド (UM
_UNNECESSARY_MATH)</a></h3> |
4111 | 4228 |
4112 | 4229 |
4113 <p> | 4230 <p> |
4114 このメソッドは、定数値で <code>java.lang.Math</code> の static メソッドを呼び出しています。 | 4231 このメソッドは、定数値で <code>java.lang.Math</code> の static メソッドを呼び出しています。 |
4115 このメソッドの結果は、静的に確定している可能性があり、より高速で、ときには定数を使用するほうがより正確です。<br> | 4232 このメソッドの結果は静的に判定でき、より高速で、ときには定数を使用するほうがより正確です。<br> |
4116 検出されるメソッドは、以下のとおりです。 | 4233 検出されるメソッドは、以下のとおりです。 |
4117 </p> | 4234 </p> |
4118 <table> | 4235 <table> |
4119 <tr> | 4236 <tr> |
4120 <th>メソッド</th> <th>パラメータ</th> | 4237 <th>メソッド</th> <th>パラメータ</th> |
4121 </tr> | 4238 </tr> |
4122 <tr> | 4239 <tr> |
4123 <td>abs</td> <td>-any-</td> | 4240 <td>abs</td> <td>-any-</td> |
4124 </tr> | 4241 </tr> |
4125 <tr> | 4242 <tr> |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4293 ソフトウェアは、制限されたディレクトリ内にあるべきパス名を構築するためにHTTPリクエストのパラメータを使いますが、パラメータはそのディレクトリの外にある場所に
解決できる「..」のようなシーケンスを適切に無効にしていません。 | 4410 ソフトウェアは、制限されたディレクトリ内にあるべきパス名を構築するためにHTTPリクエストのパラメータを使いますが、パラメータはそのディレクトリの外にある場所に
解決できる「..」のようなシーケンスを適切に無効にしていません。 |
4294 詳細は、<a href="http://cwe.mitre.org/data/definitions/23.html">http://cwe.mitre.org
/data/definitions/23.html</a> を参照してください。 | 4411 詳細は、<a href="http://cwe.mitre.org/data/definitions/23.html">http://cwe.mitre.org
/data/definitions/23.html</a> を参照してください。 |
4295 </p> | 4412 </p> |
4296 <p> | 4413 <p> |
4297 FindBugs は、相対パストラバーサルの最も露骨で自明なケースだけを探します。 | 4414 FindBugs は、相対パストラバーサルの最も露骨で自明なケースだけを探します。 |
4298 FindBugs が何かを発見したならほぼ間違いなく FindBugs が報告しないより多くの脆弱性があるでしょう。 | 4415 FindBugs が何かを発見したならほぼ間違いなく FindBugs が報告しないより多くの脆弱性があるでしょう。 |
4299 相対パストラバーサルを心配するなら、商用の静的解析ツールかペネトレーションテストツールの使用を真剣に検討するべきです。 | 4416 相対パストラバーサルを心配するなら、商用の静的解析ツールかペネトレーションテストツールの使用を真剣に検討するべきです。 |
4300 </p> | 4417 </p> |
4301 | 4418 |
4302 | 4419 |
4303 <h3><a name="SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE">SQL: SQL の Statement の e
xecute メソッドに定数でない文字列を渡している (SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE)</a></h3> | 4420 <h3><a name="SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE">SQL: SQL の Statement の e
xecute または addBatch メソッドに定数でない文字列を渡している (SQL_NONCONSTANT_STRING_PASSED_TO_EXECUT
E)</a></h3> |
4304 | 4421 |
4305 | 4422 |
4306 <p> | 4423 <p> |
4307 このメソッドは、動的に生成されるように思われる文字列で、 SQL の <code>Statement</code> の <code>execute</code>
メソッドを呼び出しています。 | 4424 このメソッドは、動的に生成されるように思われる文字列で、 SQL 文 の <code>execute</code> または <code>addBatch</co
de> メソッドを呼び出しています。 |
4308 その代わりに <code>PreparedStatement</code> を使うことを検討してください。 | 4425 その代わりに <code>PreparedStatement</code> を使用することを検討してください。 |
4309 効率的で、SQL インジェクション攻撃に強いです。 | 4426 効率的で、SQL インジェクション攻撃に強いです。 |
4310 </p> | 4427 </p> |
4311 | 4428 |
4312 | 4429 |
4313 <h3><a name="SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING">SQL: Prep
aredStatement が定数でない文字列から生成されている (SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONST
ANT_STRING)</a></h3> | 4430 <h3><a name="SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING">SQL: Prep
aredStatement が定数でない文字列から生成されている (SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONST
ANT_STRING)</a></h3> |
4314 | 4431 |
4315 | 4432 |
4316 <p> | 4433 <p> |
4317 このコードは、定数でない文字列から SQL の <code>PreparedStatement</code> を作成しています。 | 4434 このコードは、定数でない文字列から SQL の <code>PreparedStatement</code> を作成しています。 |
4318 ユーザからのチェックされていない汚染されたデータがこの文字列を作る際に使われるなら、PreparedStatement で予想外で望ましくない何かをするために
SQL インジェクションが使われる可能性があります。 | 4435 ユーザからのチェックされていない汚染されたデータがこの文字列を作る際に使われるなら、<code>PreparedStatement</code> で予想外で望ま
しくない何かをするために SQL インジェクションが使われる可能性があります。 |
4319 </p> | 4436 </p> |
4320 | 4437 |
4321 | 4438 |
4322 <h3><a name="XSS_REQUEST_PARAMETER_TO_JSP_WRITER">XSS: 反射型クロスサイトスクリプティング脆弱性がある J
SP (XSS_REQUEST_PARAMETER_TO_JSP_WRITER)</a></h3> | 4439 <h3><a name="XSS_REQUEST_PARAMETER_TO_JSP_WRITER">XSS: 反射型クロスサイトスクリプティング脆弱性がある J
SP (XSS_REQUEST_PARAMETER_TO_JSP_WRITER)</a></h3> |
4323 | 4440 |
4324 | 4441 |
4325 <p> | 4442 <p> |
4326 このコードは、JSP の出力に HTTP パラメータを直接書き込んでいます。これは XSS(クロスサイトスクリプティング) 脆弱性を可能にします。<br> | 4443 このコードは、JSP の出力に HTTP パラメータを直接書き込んでいます。これは XSS(クロスサイトスクリプティング) 脆弱性を可能にします。<br> |
4327 詳細は、<a href="http://en.wikipedia.org/wiki/Cross-site_scripting">http://en.wikipe
dia.org/wiki/Cross-site_scripting</a> を参照してください。 | 4444 詳細は、<a href="http://en.wikipedia.org/wiki/Cross-site_scripting">http://en.wikipe
dia.org/wiki/Cross-site_scripting</a> を参照してください。 |
4328 </p> | 4445 </p> |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4360 FindBugs が何かを発見したならほぼ間違いなく FindBugs が報告しないより多くの脆弱性があるでしょう。 | 4477 FindBugs が何かを発見したならほぼ間違いなく FindBugs が報告しないより多くの脆弱性があるでしょう。 |
4361 XSS を心配するなら、商用の静的解析ツールかペネトレーションテストツールの使用を真剣に検討するべきです。 | 4478 XSS を心配するなら、商用の静的解析ツールかペネトレーションテストツールの使用を真剣に検討するべきです。 |
4362 </p> | 4479 </p> |
4363 | 4480 |
4364 | 4481 |
4365 <h3><a name="BC_BAD_CAST_TO_ABSTRACT_COLLECTION">BC: 抽象コレクションへの疑わしいキャスト (BC_BAD_
CAST_TO_ABSTRACT_COLLECTION)</a></h3> | 4482 <h3><a name="BC_BAD_CAST_TO_ABSTRACT_COLLECTION">BC: 抽象コレクションへの疑わしいキャスト (BC_BAD_
CAST_TO_ABSTRACT_COLLECTION)</a></h3> |
4366 | 4483 |
4367 | 4484 |
4368 <p> | 4485 <p> |
4369 このコードは、Collection を抽象コレクションにキャストしています (たとえば <code>List</code>、<code>Set</code>、<
code>Map</code>)。 | 4486 このコードは、Collection を抽象コレクションにキャストしています (たとえば <code>List</code>、<code>Set</code>、<
code>Map</code>)。 |
4370 オブジェクトがキャストする型であると保証されることを確認してください。 | 4487 オブジェクトがキャストする型であるということが保証されていることを確認してください。 |
4371 必要とするコレクションの反復処理ができるなら Set または List にキャストする必要はありません。 | 4488 必要とするコレクションの反復処理ができるなら Set または List にキャストする必要はありません。 |
4372 </p> | 4489 </p> |
4373 | 4490 |
4374 | 4491 |
4375 <h3><a name="BC_BAD_CAST_TO_CONCRETE_COLLECTION">BC: 具象コレクションへの疑わしいキャスト (BC_BAD_
CAST_TO_CONCRETE_COLLECTION)</a></h3> | 4492 <h3><a name="BC_BAD_CAST_TO_CONCRETE_COLLECTION">BC: 具象コレクションへの疑わしいキャスト (BC_BAD_
CAST_TO_CONCRETE_COLLECTION)</a></h3> |
4376 | 4493 |
4377 | 4494 |
4378 <p> | 4495 <p> |
4379 このコードは抽象コレクション (たとえば、Collection、List、Set) を特定の具象実装 (たとえば、ArrayList、HashSet) にキャス
トしています。 | 4496 このコードは抽象コレクション (たとえば、Collection、List、Set) を特定の具象実装 (たとえば、ArrayList、HashSet) にキャス
トしています。 |
4380 これは正しくないかもしれません。そして、将来の時点で他の具象実装への切り替えをとても困難にするので、脆弱なコードになるかもしれません。 | 4497 これは正しくないかもしれません。そして、将来の時点で他の具象実装への切り替えをとても困難にするので、脆弱なコードになるかもしれません。 |
4381 そうするために特別な理由がないかぎり抽象コレクションクラスを使用してください。 | 4498 そうするための特別な理由がないかぎり抽象コレクションクラスを使用してください。 |
4382 </p> | 4499 </p> |
4383 | 4500 |
4384 | 4501 |
4385 <h3><a name="BC_UNCONFIRMED_CAST">BC: 未チェック/未確認のキャスト (BC_UNCONFIRMED_CAST)</a></
h3> | 4502 <h3><a name="BC_UNCONFIRMED_CAST">BC: 未チェック/未確認のキャスト (BC_UNCONFIRMED_CAST)</a></
h3> |
4386 | 4503 |
4387 | 4504 |
4388 <p> | 4505 <p> |
4389 このキャストはチェックされていません。すべての型のインスタンスがキャストした型にキャストできるというわけではありません。 | 4506 このキャストはチェックされていません。すべての型のインスタンスをキャストする型へキャストできるわけではありません。 |
4390 プログラムのロジックがこのキャストが失敗しないことを確実に確認してください。 | 4507 プログラムのロジックがこのキャストが失敗しないことを確実に確認してください。 |
4391 </p> | 4508 </p> |
4392 | 4509 |
4393 | 4510 |
4394 <h3><a name="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE">BC: メソッドからの戻り値の未チェック/未確認のキャスト
(BC_UNCONFIRMED_CAST_OF_RETURN_VALUE)</a></h3> | 4511 <h3><a name="BC_UNCONFIRMED_CAST_OF_RETURN_VALUE">BC: メソッドからの戻り値の未チェック/未確認のキャスト
(BC_UNCONFIRMED_CAST_OF_RETURN_VALUE)</a></h3> |
4395 | 4512 |
4396 | 4513 |
4397 <p> | 4514 <p> |
4398 このコードは、メソッドの戻り値の未確認のキャストを実行しています。 | 4515 このコードは、メソッドの戻り値の未確認のキャストを実行しています。 |
4399 コードは、キャストが安全であることが保証されるようにメソッドを呼び出しているかもしれませんが、FindBugs はキャストが安全であることを検証できません。 | 4516 コードは、キャストが安全であることが保証されるようにメソッドを呼び出しているかもしれませんが、FindBugs はキャストが安全であることを検証できません。 |
4400 プログラムのロジックがこのキャストが失敗しないことを確実に確認してください。 | 4517 プログラムのロジックがこのキャストが失敗しないことを確実に確認してください。 |
4401 </p> | 4518 </p> |
4402 | 4519 |
4403 | 4520 |
4404 <h3><a name="BC_VACUOUS_INSTANCEOF">BC: 常に true を返す instanceof (BC_VACUOUS_INSTA
NCEOF)</a></h3> | 4521 <h3><a name="BC_VACUOUS_INSTANCEOF">BC: 常に true を返す instanceof (BC_VACUOUS_INSTA
NCEOF)</a></h3> |
4405 | 4522 |
4406 | 4523 |
4407 <p> | 4524 <p> |
4408 この instanceof は常に true を返します (テストしている値が null でないかぎり)。 | 4525 この instanceof は常に true を返します (テストしている値が null でないかぎり)。 |
4409 これは安全で、誤解や論理エラーを指摘していないことを確認してください。 | 4526 これは安全で、誤解や論理エラーを指摘していないことを確認してください。 |
4410 本当に null なのか値をテストしたいなら、多分、instanceof ではなく null テストをしたほうが良く、より明確になります。 | 4527 本当に null なのか値をテストしたいなら、多分、instanceof ではなく null テストをしたほうが良く、より明確になります。 |
4411 </p> | 4528 </p> |
4412 | 4529 |
4413 | 4530 |
4414 <h3><a name="ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT">BSHIFT: 符号なし右シフトを short/by
te にキャストしている (ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT)</a></h3> | 4531 <h3><a name="ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT">BSHIFT: 符号なし右シフトを short/by
te にキャストしている (ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT)</a></h3> |
4415 | 4532 |
4416 | 4533 |
4417 <p> | 4534 <p> |
4418 このコードは、符号なしキャストの実行結果を short または byte にキャストしています。結果の上位ビットは捨てられます。 | 4535 このコードは、符号なしキャストの実行結果を short または byte にキャストしています。結果の上位ビットは捨てられます。 |
4419 上位ビットが捨てられるので、符号付き、符号なし右シフトの (シフトのサイズによって) 違いがないかもしれません。 | 4536 上位ビットが捨てられるので、符号付きと符号なし右シフト (シフトのサイズによって) との違いがないかもしれません。 |
4420 </p> | 4537 </p> |
4421 | 4538 |
4422 | 4539 |
4423 <h3><a name="CI_CONFUSED_INHERITANCE">CI: final なクラスが protected フィールドを宣言している (CI
_CONFUSED_INHERITANCE)</a></h3> | 4540 <h3><a name="CI_CONFUSED_INHERITANCE">CI: final なクラスが protected フィールドを宣言している (CI
_CONFUSED_INHERITANCE)</a></h3> |
4424 | 4541 |
4425 | 4542 |
4426 <p> | 4543 <p> |
4427 このクラスは、final と宣言されていますが、フィールドは protected と宣言されています。 | 4544 このクラスは、final と宣言されていますが、フィールドは protected と宣言されています。 |
4428 クラスは fainal なので派生できません。、protected の使用は紛らわしいです。 | 4545 クラスは fainal なので派生できません。、protected の使用は紛らわしいです。 |
4429 フィールドのためのアクセス修飾子は、フィールドの真の用途を表すため、 private か public に変更するべきです。 | 4546 フィールドのためのアクセス修飾子は、フィールドの真の用途を表すため、 private か public に変更するべきです。 |
4430 </p> | 4547 </p> |
4431 | 4548 |
4432 | 4549 |
4433 <h3><a name="DB_DUPLICATE_BRANCHES">DB: 2つの分岐のために同じコードを使用しているメソッド (DB_DUPLICATE_
BRANCHES)</a></h3> | 4550 <h3><a name="DB_DUPLICATE_BRANCHES">DB: 2つの分岐のために同じコードを使用しているメソッド (DB_DUPLICATE_
BRANCHES)</a></h3> |
4434 | 4551 |
4435 | 4552 |
4436 <p> | 4553 <p> |
4437 このメソッドは、条件分岐の2つの分岐を実装するために同じコードを使用しています。これがコーディングミスではないことを確認してください。 | 4554 このメソッドは、条件分岐の2つの分岐を実装するために同じコードを使用しています。これがコーディングミスではないことを確認してください。 |
4438 </p> | 4555 </p> |
4439 | 4556 |
4440 | 4557 |
4441 <h3><a name="DB_DUPLICATE_SWITCH_CLAUSES">DB: switch 文の2つの case のために同じコードを使用している
メソッド (DB_DUPLICATE_SWITCH_CLAUSES)</a></h3> | 4558 <h3><a name="DB_DUPLICATE_SWITCH_CLAUSES">DB: switch 文の2つの case のために同じコードを使用している
メソッド (DB_DUPLICATE_SWITCH_CLAUSES)</a></h3> |
4442 | 4559 |
4443 | 4560 |
4444 <p> | 4561 <p> |
4445 このメソッドは、switch 文の2つの case を実装するために同じコードを使用しています。 | 4562 このメソッドは、switch 文の2つの case を実装するために同じコードを使用しています。 |
4446 複製コードの case かもしれないしコーディングミスかもしれません。 | 4563 複製コードの case かもしれないし、コーディングミスかもしれません。 |
4447 </p> | 4564 </p> |
4448 | 4565 |
4449 | 4566 |
4450 <h3><a name="DLS_DEAD_LOCAL_STORE">DLS: ローカル変数への無効な代入 (DLS_DEAD_LOCAL_STORE)</a>
</h3> | 4567 <h3><a name="DLS_DEAD_LOCAL_STORE">DLS: ローカル変数への無効な代入 (DLS_DEAD_LOCAL_STORE)</a>
</h3> |
4451 | 4568 |
4452 | 4569 |
4453 <p> | 4570 <p> |
4454 この命令はローカル変数に値を代入していますが、値は読み出されないか以降の命令でも使われません。 | 4571 この命令はローカル変数に値を代入していますが、値は読み出されないか以降の命令でも使われません。 |
4455 多くの場合、計算された値が決して使われないので、これは誤りを示します。 | 4572 多くの場合、計算された値が決して使われないので、これは誤りを示します。 |
4456 </p> | 4573 </p> |
(...skipping 10 matching lines...) Expand all Loading... |
4467 この文は、return 文でローカル変数に代入をしています。この代入は効果がありません。 | 4584 この文は、return 文でローカル変数に代入をしています。この代入は効果がありません。 |
4468 この文が正しいことを確かめてください。 | 4585 この文が正しいことを確かめてください。 |
4469 </p> | 4586 </p> |
4470 | 4587 |
4471 | 4588 |
4472 <h3><a name="DLS_DEAD_LOCAL_STORE_OF_NULL">DLS: ローカル変数への無効な null 代入 (DLS_DEAD_LO
CAL_STORE_OF_NULL)</a></h3> | 4589 <h3><a name="DLS_DEAD_LOCAL_STORE_OF_NULL">DLS: ローカル変数への無効な null 代入 (DLS_DEAD_LO
CAL_STORE_OF_NULL)</a></h3> |
4473 | 4590 |
4474 | 4591 |
4475 <p> | 4592 <p> |
4476 このコードはローカル変数に null を代入していますが代入された値は読み出されていません。 | 4593 このコードはローカル変数に null を代入していますが代入された値は読み出されていません。 |
4477 この代入はガベージコレクタを手伝うために導入されたのかもしれませんが、Java SE 6 ではもはや必要とされないか有効ではありません。 | 4594 この代入はガベージコレクタを手伝うために導入されたのかもしれませんが、Java SE 6 ではもはや必要とされないか有用ではありません。 |
4478 </p> | 4595 </p> |
4479 | 4596 |
4480 | 4597 |
4481 <h3><a name="DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD">DLS: フィールドを遮るローカル変数への無効な代入 (DLS
_DEAD_LOCAL_STORE_SHADOWS_FIELD)</a></h3> | 4598 <h3><a name="DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD">DLS: フィールドを遮るローカル変数への無効な代入 (DLS
_DEAD_LOCAL_STORE_SHADOWS_FIELD)</a></h3> |
4482 | 4599 |
4483 | 4600 |
4484 <p> | 4601 <p> |
4485 この命令は、ローカル変数に値を代入していますが、値は読み出されないか以降の命令でも使われません。 | 4602 この命令は、ローカル変数に値を代入していますが、値は読み出されないか以降の命令でも使われません。 |
4486 多くの場合、計算された値が決して使われないので、これは誤りを示します。 | 4603 多くの場合、計算された値が決して使われないので、これは誤りを示します。 |
4487 フィールドがローカル変数と同じ名前です。そうではなく、フィールドに代入するつもりでしたか? | 4604 フィールドがローカル変数と同じ名前です。そうではなく、フィールドに代入するつもりでしたか? |
(...skipping 23 matching lines...) Expand all Loading... |
4511 <p> | 4628 <p> |
4512 このコードは、文字列で <code>substring(0)</code> を呼び出していますが、元の値を返します。 | 4629 このコードは、文字列で <code>substring(0)</code> を呼び出していますが、元の値を返します。 |
4513 </p> | 4630 </p> |
4514 | 4631 |
4515 | 4632 |
4516 <h3><a name="DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED">Dm: Thread オブジェクトが Runna
ble が期待されているところに渡されている (DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED)</a></h3> | 4633 <h3><a name="DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED">Dm: Thread オブジェクトが Runna
ble が期待されているところに渡されている (DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED)</a></h3> |
4517 | 4634 |
4518 | 4635 |
4519 <p> | 4636 <p> |
4520 Threadオブジェクトが Runnable が期待されているメソッドへのパラメータとして渡されています。 | 4637 Threadオブジェクトが Runnable が期待されているメソッドへのパラメータとして渡されています。 |
4521 これはかなり異常で、論理エラーを示すか、予想外の振る舞いの原因になるかもしれません。 | 4638 これはかなり異常で、論理エラーを示すか、予想外の振る舞いの原因になることがあります。 |
4522 </p> | 4639 </p> |
4523 | 4640 |
4524 | 4641 |
4525 <h3><a name="EQ_DOESNT_OVERRIDE_EQUALS">Eq: スーパークラスの equals メソッドをオーバーライドしていないクラス
(EQ_DOESNT_OVERRIDE_EQUALS)</a></h3> | 4642 <h3><a name="EQ_DOESNT_OVERRIDE_EQUALS">Eq: スーパークラスの equals メソッドをオーバーライドしていないクラス
(EQ_DOESNT_OVERRIDE_EQUALS)</a></h3> |
4526 | 4643 |
4527 | 4644 |
4528 <p> | 4645 <p> |
4529 このクラスは、<code>equals</code> メソッドを定義しているクラスを拡張してフィールドを追加していますが、<code>equals</code>
メソッドを定義していません。 | 4646 このクラスは、<code>equals</code> メソッドを定義しているクラスを拡張してフィールドを追加していますが、<code>equals</code>
メソッドを定義していません。 |
4530 したがって、このクラスのインスタンスの等価性は、サブクラスと追加されたフィールドの同一性を無視します。 | 4647 したがって、このクラスのインスタンスの等価性は、サブクラスと追加されたフィールドの同一性を無視します。 |
4531 これが意図したことで、しかも、<code>equals</code> メソッドをオーバーライドする必要がないことを確実にしてください。 | 4648 これが意図したことで、しかも、<code>equals</code> メソッドをオーバーライドする必要がないことを確実にしてください。 |
4532 たとえ <code>equals</code> メソッドをオーバーライドする必要がないとしても、サブクラスのための <code>equals</code> メソ
ッドが <code>super.equals(o)</code> を呼び出して結果を返すという事実を実証するために、いずれにしろ、<code>equals</c
ode> メソッドをオーバーライドすることを検討してください。 | 4649 たとえ <code>equals</code> メソッドをオーバーライドする必要がないとしても、サブクラスのための <code>equals</code> メソ
ッドが <code>super.equals(o)</code> を呼び出して結果を返すという事実を実証するためにいずれにしろ、<code>equals</co
de> メソッドをオーバーライドすることを検討してください。 |
4533 </p> | 4650 </p> |
4534 | 4651 |
4535 | 4652 |
4536 <h3><a name="EQ_UNUSUAL">Eq: 異常な equals メソッド (EQ_UNUSUAL)</a></h3> | 4653 <h3><a name="EQ_UNUSUAL">Eq: 異常な equals メソッド (EQ_UNUSUAL)</a></h3> |
4537 | 4654 |
4538 | 4655 |
4539 <p> | 4656 <p> |
4540 このクラスの <code>equals</code> メソッドは、引数の型が <code>this</code> オブジェクトの型と互換性があるこをチェックする
ために、我々が認識しているパターンで何もしていません。 | 4657 このクラスの <code>equals</code> メソッドは、引数の型が <code>this</code> オブジェクトの型と互換性があるこをチェックする
ために我々が認識しているパターンで何もしていません。 |
4541 このコードは何も間違っていないかもしれませんが、レビューする価値があります。 | 4658 このコードは何も間違っていないかもしれませんが、レビューする価値があります。 |
4542 </p> | 4659 </p> |
4543 | 4660 |
4544 | 4661 |
4545 <h3><a name="FE_FLOATING_POINT_EQUALITY">FE: 浮動小数点の等価性のためのテスト (FE_FLOATING_POINT
_EQUALITY)</a></h3> | 4662 <h3><a name="FE_FLOATING_POINT_EQUALITY">FE: 浮動小数点の等価性のためのテスト (FE_FLOATING_POINT
_EQUALITY)</a></h3> |
4546 | 4663 |
4547 | 4664 |
4548 <p> | 4665 <p> |
4549 この演算は、等価性のために2つの浮動小数点値を比較しています。 | 4666 この演算は、等価性のために2つの浮動小数点値を比較しています。 |
4550 浮動小数点の計算は丸めを伴うかもしれないので計算された float と double の値は正確ではないかもしれません。 | 4667 浮動小数点の計算は丸めを伴うかもしれないので計算された float と double の値は正確ではないかもしれません。 |
4551 通貨のような正確でなければならない値のために、<code>BigDecimal</code> のような固定精度型を使うことを検討してください。 | 4668 通貨のような正確でなければならない値のために <code>BigDecimal</code> のような固定精度型を使用することを検討してください。 |
4552 正確である必要がない値のためにいくつかの範囲の中で等価性のために比較することを検討してください。 | 4669 正確である必要がない値のためにいくつかの範囲の中で等価性のために比較することを検討してください。 |
4553 たとえば、<code>if (Math.abs(x - y) < .0000001)</code>。<br> | 4670 たとえば、<code>if (Math.abs(x - y) < .0000001)</code>。<br> |
4554 詳細は Java 言語仕様4.2.4を参照してください。 | 4671 詳細は Java 言語仕様4.2.4を参照してください。 |
4555 </p> | 4672 </p> |
4556 | 4673 |
4557 | 4674 |
4558 <h3><a name="VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN">FS: Boolean 型でない引数を %b
書式指示子を使用してフォーマットしている (VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN)</a></h3> | 4675 <h3><a name="VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN">FS: Boolean 型でない引数を %b
書式指示子を使用してフォーマットしている (VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN)</a></h3> |
4559 | 4676 |
4560 | 4677 |
4561 <p> | 4678 <p> |
4562 Boolean 型でない引数を %b 書式指示子でフォーマットしています。これは例外をスローしません。 | 4679 Boolean 型でない引数を %b 書式指示子でフォーマットしています。これは例外をスローしません。 |
4563 その代わりに、非 null 値では true 、null では false を出力します。 | 4680 その代わりに、非 null 値では true 、null では false を出力します。 |
4564 書式文字列のこの機能は奇妙で意図したことではないかもしれません。 | 4681 書式文字列のこの機能は奇妙で意図したことではないかもしれません。 |
4565 </p> | 4682 </p> |
4566 | 4683 |
4567 | 4684 |
4568 <h3><a name="IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD">IA: 潜在的な継承された
メソッドなのか外部のメソッドなのかあいまいなメソッドの呼び出し (IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_M
ETHOD)</a></h3> | 4685 <h3><a name="IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD">IA: 潜在的な継承された
メソッドなのか外部のメソッドなのかあいまいなメソッドの呼び出し (IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_M
ETHOD)</a></h3> |
4569 | 4686 |
4570 | 4687 |
4571 <p> | 4688 <p> |
4572 内部クラスは、継承されたメソッドか外部クラスで定義されたメソッドなのかどちらとも解釈できるメソッドを呼び出しています。 | 4689 内部クラスは、継承されたメソッドか外部クラスで定義されたメソッドなのかどちらとも解釈できるメソッドを呼び出しています。 |
4573 たとえば、<code>foo(17)</code> を呼び出します。それはスーパークラスと外部のメソッドの両方で定義されています。 | 4690 たとえば、<code>foo(17)</code> を呼び出します。それはスーパークラスと外部のメソッドの両方で定義されています。 |
4574 Java のセマンティックスでは、継承したメソッドを呼び出しますが、これは意図したことではないかもしれません。 | 4691 Java のセマンティックスでは、継承したメソッドを呼び出しますが、これはあなたが意図したことではないかもしれません。 |
4575 </p> | 4692 </p> |
4576 <p> | 4693 <p> |
4577 本当に継承されたメソッドを呼び出すつもりなら super を付けて (例:super.foo(17)) 呼び出してください。 | 4694 本当に継承されたメソッドを呼び出すつもりなら super を付けて (例:super.foo(17)) 呼び出してください。 |
4578 そうすれば、外部クラスのメソッドではなく継承されたメソッドを呼び出したいことがこのコードを読む人と FindBugs に明確になります。 | 4695 そうすれば、外部クラスのメソッドではなく継承されたメソッドを呼び出したいことがこのコードを読む人と FindBugs に明確になります。 |
4579 </p> | 4696 </p> |
4580 <p> | 4697 <p> |
4581 <code>this.foo(17)</code> を呼び出す場合は、継承されたメソッドが呼び出されます。 | 4698 <code>this.foo(17)</code> を呼び出す場合は、継承されたメソッドが呼び出されます。 |
4582 しかしながら、FindBugs はクラスファイルを見るだけなので、<code>this.foo(17)</code> と <code>foo(17)</code
> の呼び出しの違いを見分けることができません。 | 4699 しかしながら、FindBugs はクラスファイルを見るだけなので、<code>this.foo(17)</code> と <code>foo(17)</code
> の呼び出しの違いを見分けることができません。 |
4583 潜在的なあいまいな呼び出しについて文句を言うでしょう。 | 4700 潜在的なあいまいな呼び出しについて文句を言うでしょう。 |
4584 </p> | 4701 </p> |
4585 | 4702 |
4586 | 4703 |
4587 <h3><a name="IC_INIT_CIRCULARITY">IC: 初期化が循環している (IC_INIT_CIRCULARITY)</a></h3> | 4704 <h3><a name="IC_INIT_CIRCULARITY">IC: 初期化が循環している (IC_INIT_CIRCULARITY)</a></h3> |
4588 | 4705 |
4589 | 4706 |
4590 <p> | 4707 <p> |
4591 バグインスタンスによって参照される2つのクラスのスタティックイニシャライザで循環が検出されました。 | 4708 バグインスタンスによって参照される2つのクラスのスタティックイニシャライザで循環が検出されました。 |
4592 多くの種類の予想外の振る舞いは、そのような循環に起因するかもしれません。 | 4709 さまざまな予想外の振る舞いはそのような循環に起因することがあります。 |
4593 </p> | 4710 </p> |
4594 | 4711 |
4595 | 4712 |
4596 <h3><a name="ICAST_IDIV_CAST_TO_DOUBLE">ICAST: 整数の除算の結果を double または float にキャストし
ている (ICAST_IDIV_CAST_TO_DOUBLE)</a></h3> | 4713 <h3><a name="ICAST_IDIV_CAST_TO_DOUBLE">ICAST: 整数の除算の結果を double または float にキャストし
ている (ICAST_IDIV_CAST_TO_DOUBLE)</a></h3> |
4597 | 4714 |
4598 | 4715 |
4599 <p> | 4716 <p> |
4600 このコードは 整数の除算の結果を double または float にキャストしています。 | 4717 このコードは 整数の除算の結果を double または float にキャストしています。 |
4601 整数で除算をすることは、ゼロに最も近い整数値まで結果を切り捨てます。 | 4718 整数で除算をすることは、ゼロに最も近い整数値まで結果を切り捨てます。 |
4602 結果が double にキャストされたという事実は、この精度が維持されるべきだったことを示唆しています。 | 4719 結果が double にキャストされたという事実は、この精度が維持されるべきだったことを示唆しています。 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4643 | 4760 |
4644 | 4761 |
4645 <p> | 4762 <p> |
4646 このコードは、除算か符号付き右シフトを使用して2つの整数の平均を計算して、結果を配列の添字として使用しています。 | 4763 このコードは、除算か符号付き右シフトを使用して2つの整数の平均を計算して、結果を配列の添字として使用しています。 |
4647 平均値が非常に大きいならオーバーフローする可能性があります (結果として負の平均の計算になる)。 | 4764 平均値が非常に大きいならオーバーフローする可能性があります (結果として負の平均の計算になる)。 |
4648 結果が負でないことを意図していたなら、その代わりに符号なし右シフトを使用できます。 | 4765 結果が負でないことを意図していたなら、その代わりに符号なし右シフトを使用できます。 |
4649 つまり、<code>(low+high)/2</code> ではなく <code>(low+high) >>> 1</code> を使用してく
ださい。 | 4766 つまり、<code>(low+high)/2</code> ではなく <code>(low+high) >>> 1</code> を使用してく
ださい。 |
4650 </p> | 4767 </p> |
4651 <p> | 4768 <p> |
4652 このバグは、二分探索とマージソートの多くの以前の実装で存在します。 | 4769 このバグは、二分探索とマージソートの多くの以前の実装で存在します。 |
4653 Martin Buchholz が <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=64
12541">JDK ライブラリでバグを発見し、修正しています</a>。 | 4770 Martin Buchholz が <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=64
12541">JDK ライブラリのバグを発見して修正しています</a>。 |
4654 Joshua Bloch が <a href="http://googleresearch.blogspot.com/2006/06/extra-extra-r
ead-all-about-it-nearly.html">バグパターンとして公表しました</a>。 | 4771 Joshua Bloch が <a href="http://googleresearch.blogspot.com/2006/06/extra-extra-r
ead-all-about-it-nearly.html">バグパターンとして公表しました</a>。 |
4655 </p> | 4772 </p> |
4656 | 4773 |
4657 | 4774 |
4658 <h3><a name="IM_BAD_CHECK_FOR_ODD">IM: 負数で機能しない奇数チェック (IM_BAD_CHECK_FOR_ODD)</a>
</h3> | 4775 <h3><a name="IM_BAD_CHECK_FOR_ODD">IM: 負数で機能しない奇数チェック (IM_BAD_CHECK_FOR_ODD)</a>
</h3> |
4659 | 4776 |
4660 | 4777 |
4661 <p> | 4778 <p> |
4662 このコードは、<code>x % 2 == 1</code> を使用して値が負数なのか確かめていますが、負数 (たとえば、<code>(-5) % 2 == -
1</code>) なので機能しません。 | 4779 このコードは、<code>x % 2 == 1</code> を使用して値が負数なのか確かめていますが、負数 (たとえば、<code>(-5) % 2 == -
1</code>) なので機能しません。 |
4663 奇数チェックを意図しているなら、<code>x & 1 == 1</code> または <code>x % 2 != 0</code> を使うことを検討
してください。 | 4780 奇数チェックを意図しているなら、<code>x & 1 == 1</code> または <code>x % 2 != 0</code> を使用することを
検討してください。 |
4664 </p> | 4781 </p> |
4665 | 4782 |
4666 | 4783 |
4667 <h3><a name="INT_BAD_REM_BY_1">INT: 1を法とする整数の剰余 (INT_BAD_REM_BY_1)</a></h3> | 4784 <h3><a name="INT_BAD_REM_BY_1">INT: 1を法とする整数の剰余 (INT_BAD_REM_BY_1)</a></h3> |
4668 | 4785 |
4669 | 4786 |
4670 <p> | 4787 <p> |
4671 どんな式 <code>(exp % 1)</code> も常に0を返すことが保証されています。 | 4788 どんな式 <code>(exp % 1)</code> も常に0を返すことが保証されています。 |
4672 そうではなく、<code>(exp & 1)</code> または <code>(exp & 2)</code> を意味していましたか? | 4789 そうではなく、<code>(exp & 1)</code> または <code>(exp & 2)</code> を意味していましたか? |
4673 </p> | 4790 </p> |
4674 | 4791 |
4675 | 4792 |
4676 <h3><a name="INT_VACUOUS_BIT_OPERATION">INT: 整数値の無意味なビットマスク演算 (INT_VACUOUS_BIT_O
PERATION)</a></h3> | 4793 <h3><a name="INT_VACUOUS_BIT_OPERATION">INT: 整数値の無意味なビットマスク演算 (INT_VACUOUS_BIT_O
PERATION)</a></h3> |
4677 | 4794 |
4678 | 4795 |
4679 <p> | 4796 <p> |
4680 これはどんな有効な働きもしない整数ビット演算 (AND、OR、XOR) です (たとえば <code>v & 0xffffffff</code>)。 | 4797 どんな有用な仕事もしない整数ビット演算 (AND、OR、XOR) です (たとえば <code>v & 0xffffffff</code>)。 |
4681 </p> | 4798 </p> |
4682 | 4799 |
4683 | 4800 |
4684 <h3><a name="INT_VACUOUS_COMPARISON">INT: 整数値の無意味な比較 (INT_VACUOUS_COMPARISON)</a
></h3> | 4801 <h3><a name="INT_VACUOUS_COMPARISON">INT: 整数値の無意味な比較 (INT_VACUOUS_COMPARISON)</a
></h3> |
4685 | 4802 |
4686 | 4803 |
4687 <p> | 4804 <p> |
4688 常に同じ値を返す整数の比較があります (たとえば <code>x <= Integer.MAX_VALUE</code>)。 | 4805 常に同じ値を返す整数の比較があります (たとえば <code>x <= Integer.MAX_VALUE</code>)。 |
4689 </p> | 4806 </p> |
4690 | 4807 |
4691 | 4808 |
4692 <h3><a name="MTIA_SUSPECT_SERVLET_INSTANCE_FIELD">MTIA: Servlet クラスを拡張したクラスでのインス
タンス変数の使用 (MTIA_SUSPECT_SERVLET_INSTANCE_FIELD)</a></h3> | 4809 <h3><a name="MTIA_SUSPECT_SERVLET_INSTANCE_FIELD">MTIA: Servlet クラスを拡張したクラスでのインス
タンス変数の使用 (MTIA_SUSPECT_SERVLET_INSTANCE_FIELD)</a></h3> |
4693 | 4810 |
4694 | 4811 |
4695 <p> | 4812 <p> |
4696 Servletクラスを拡張したクラスで、インスタンス変数を使用しています。 | 4813 Servletクラスを拡張したクラスで、インスタンス変数を使用しています。 |
4697 Servlet クラスの1つのインスタンスだけが Java EE フレームワークによって作成され、マルチスレッドによって使われるので、このパラダイムは極めて問題
があり、推奨できません。 | 4814 Servlet クラスの1つのインスタンスだけが Java EE フレームワークによって作成され、マルチスレッドによって使われるので、このパラダイムは極めて問題
があり、推奨できません。 |
4698 ローカル変数を使うことだけを検討してください。 | 4815 ローカル変数を使用することだけを検討してください。 |
4699 </p> | 4816 </p> |
4700 | 4817 |
4701 | 4818 |
4702 <h3><a name="MTIA_SUSPECT_STRUTS_INSTANCE_FIELD">MTIA: Struts Action を拡張したクラスでのイ
ンスタンス変数の使用 (MTIA_SUSPECT_STRUTS_INSTANCE_FIELD)</a></h3> | 4819 <h3><a name="MTIA_SUSPECT_STRUTS_INSTANCE_FIELD">MTIA: Struts Action を拡張したクラスでのイ
ンスタンス変数の使用 (MTIA_SUSPECT_STRUTS_INSTANCE_FIELD)</a></h3> |
4703 | 4820 |
4704 | 4821 |
4705 <p> | 4822 <p> |
4706 Struts Action クラスを拡張したクラスで、インスタンス変数を使用しています。 | 4823 Struts Action クラスを拡張したクラスで、インスタンス変数を使用しています。 |
4707 Struts Action クラスの1つのインスタンスだけが Struts フレームワークによって作成され、マルチスレッドによって使われるので、このパラダイムは
極めて問題があり、推奨できません。 | 4824 Struts Action クラスの1つのインスタンスだけが Struts フレームワークによって作成され、マルチスレッドによって使われるので、このパラダイムは
極めて問題があり、推奨できません。 |
4708 ローカル変数を使うことだけを検討してください。 | 4825 ローカル変数を使用することだけを検討してください。 |
4709 モニタを除いて書き込まれるインスタンスフィールドだけが報告されます。 | 4826 モニタを除いて書き込まれるインスタンスフィールドだけが報告されます。 |
4710 </p> | 4827 </p> |
4711 | 4828 |
4712 | 4829 |
4713 <h3><a name="NP_DEREFERENCE_OF_READLINE_VALUE">NP: readLine メソッドの結果が null なのか確かめ
ないで値を利用している (NP_DEREFERENCE_OF_READLINE_VALUE)</a></h3> | 4830 <h3><a name="NP_DEREFERENCE_OF_READLINE_VALUE">NP: readLine メソッドの結果が null なのか確かめ
ないで値を利用している (NP_DEREFERENCE_OF_READLINE_VALUE)</a></h3> |
4714 | 4831 |
4715 | 4832 |
4716 <p> | 4833 <p> |
4717 <code>readLine</code> メソッドの結果が null なのか確かめないで値を利用しています。 | 4834 <code>readLine</code> メソッドの結果が null なのか確かめないで値を利用しています。 |
4718 <code>readLine</code> メソッドは、それ以上読み出すテキスト行がなければ null を返すので、NullPointerException が
発生します。 | 4835 <code>readLine</code> メソッドは、それ以上読み出すテキスト行がなければ null を返すので、NullPointerException が
発生します。 |
4719 </p> | 4836 </p> |
4720 | 4837 |
4721 | 4838 |
4722 <h3><a name="NP_IMMEDIATE_DEREFERENCE_OF_READLINE">NP: readLine メソッドの結果をすぐに利用してい
る (NP_IMMEDIATE_DEREFERENCE_OF_READLINE)</a></h3> | 4839 <h3><a name="NP_IMMEDIATE_DEREFERENCE_OF_READLINE">NP: readLine メソッドの結果をすぐに利用してい
る (NP_IMMEDIATE_DEREFERENCE_OF_READLINE)</a></h3> |
4723 | 4840 |
4724 | 4841 |
4725 <p> | 4842 <p> |
4726 <code>readLine</code> メソッドの結果をすぐに利用しています。 | 4843 <code>readLine</code> メソッドの結果をすぐに利用しています。 |
4727 <code>readLine</code> メソッドは、それ以上読み出すテキスト行がなければ null を返すので、NullPointerException が
発生します。 | 4844 <code>readLine</code> メソッドは、それ以上読み出すテキスト行がなければ null を返すので、NullPointerException が
発生します。 |
4728 </p> | 4845 </p> |
4729 | 4846 |
4730 | 4847 |
4731 <h3><a name="NP_LOAD_OF_KNOWN_NULL_VALUE">NP: null とわかっている値のロード (NP_LOAD_OF_KNOW
N_NULL_VALUE)</a></h3> | 4848 <h3><a name="NP_LOAD_OF_KNOWN_NULL_VALUE">NP: null とわかっている値のロード (NP_LOAD_OF_KNOW
N_NULL_VALUE)</a></h3> |
4732 | 4849 |
4733 | 4850 |
4734 <p> | 4851 <p> |
4735 ここで参照されている変数は、以前に null なのかチェックしているため null であることがわかっています。 | 4852 ここで参照されている変数は、以前に null なのかチェックしているため null であることがわかっています。 |
4736 これは有効かもしれないが、間違いかもしれません (多分異なる変数を参照することを意図してました、あるいは以前の null チェックで null でないのか確か
めるべきでした)。 | 4853 これは有効ですが、間違いかもしれません (多分異なる変数を参照することを意図してました、または以前の null チェックで null でないのか確かめるべきで
した)。 |
4737 </p> | 4854 </p> |
4738 | 4855 |
4739 | 4856 |
4740 <h3><a name="NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION">NP: メソッドはパラメータに nullness ア
ノテーションを強化している (NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION)</a></h3> | 4857 <h3><a name="NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION">NP: メソッドはパラメータに nullness ア
ノテーションを強化している (NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION)</a></h3> |
4741 | 4858 |
4742 | 4859 |
4743 <p> | 4860 <p> |
4744 メソッドは、オーバーライドするメソッドの契約を常に実装するべきです。 | 4861 メソッドは、オーバーライドするメソッドの契約を常に実装するべきです。 |
4745 したがって、メソッドが @Nullable としてマークされるパラメーターを取るならば、サブクラスでパラメーターを @Nonnull にしてメソッドをオーバーラ
イドするべきでありません。 | 4862 したがって、メソッドが @Nullable としてマークされるパラメーターを取るならば、サブクラスでパラメーターを @Nonnull にしてメソッドをオーバーラ
イドするべきでありません。 |
4746 そうするとメソッドが null パラメータを処理すべき契約を破ります。 | 4863 そうするとメソッドが null パラメータを処理すべき契約を破ります。 |
4747 </p> | 4864 </p> |
4748 | 4865 |
4749 | 4866 |
4750 <h3><a name="NP_METHOD_RETURN_RELAXING_ANNOTATION">NP: メソッドは戻り値の nullness アノテーショ
ンを緩和している (NP_METHOD_RETURN_RELAXING_ANNOTATION)</a></h3> | 4867 <h3><a name="NP_METHOD_RETURN_RELAXING_ANNOTATION">NP: メソッドは戻り値の nullness アノテーショ
ンを緩和している (NP_METHOD_RETURN_RELAXING_ANNOTATION)</a></h3> |
4751 | 4868 |
4752 | 4869 |
4753 <p> | 4870 <p> |
4754 メソッドは、オーバーライドするメソッドの契約を常に実装するべきです。 | 4871 メソッドは、オーバーライドするメソッドの契約を常に実装するべきです。 |
4755 したがって、メソッドが @Nonnull 値を返すようにアノテートしているならば、サブクラスでメソッドが @Nullable または @CheckForNul
l 値を返すようにアノテートしてメソッドをオーバーライドするべきでありません。 | 4872 したがって、メソッドが @Nonnull 値を返すようにアノテートしているならば、サブクラスでメソッドが @Nullable または @CheckForNul
l 値を返すようにアノテートしてメソッドをオーバーライドするべきでありません。 |
4756 そうするとメソッドが null を返すべできではない契約を破ります。 | 4873 そうするとメソッドが null を返すべできではない契約を破ります。 |
4757 </p> | 4874 </p> |
4758 | 4875 |
4759 | 4876 |
4760 <h3><a name="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE">NP: null になっている可能性があるメソッドの戻
り値を利用している (NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE)</a></h3> | 4877 <h3><a name="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE">NP: null になっている可能性があるメソッドの戻
り値を利用している (NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE)</a></h3> |
4761 | 4878 |
4762 | 4879 |
4763 <p> | 4880 <p> |
4764 メソッドからの戻り値を null チェックしないで利用しています。メソッドの戻り値は null なのかチェックするべきです。 | 4881 メソッドからの戻り値を null チェックしないで利用しています。メソッドの戻り値は null なのかチェックするべきです。 |
4765 コードが実行されると NullPointerException が発生するかもしれません。 | 4882 コードが実行されると NullPointerException を引き起こすことがあります。 |
4766 </p> | 4883 </p> |
4767 | 4884 |
4768 | 4885 |
4769 <h3><a name="NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE">NP: null 値を実行不可能かもしれない分岐で
利用している可能性がある (NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE)</a></h3> | 4886 <h3><a name="NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE">NP: null 値を実行不可能かもしれない分岐で
利用している可能性がある (NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE)</a></h3> |
4770 | 4887 |
4771 | 4888 |
4772 <p> | 4889 <p> |
4773 分岐または文が実行されるなら、null 値が利用されて NullPointerException が発生します。 | 4890 分岐または文が実行されるなら、null 値が利用されて NullPointerException が発生します。 |
4774 もちろん、問題は分岐または文が実行不可能で、NullPointerException が決して発生する可能性がないということかもしれません。 | 4891 もちろん、問題は分岐または文が実行不可能で、NullPointerException が決して発生する可能性がないということかもしれません。 |
4775 それを決めるのは FindBugs の能力を超えています。 | 4892 それを決めるのは FindBugs の能力を超えています。 |
4776 この値がすでに null であることを検査したという事実からこれは明確な可能性です。 | 4893 この値が既に null であることを検査したという事実からこれは明確な可能性です。 |
4777 </p> | 4894 </p> |
4778 | 4895 |
4779 | 4896 |
4780 <h3><a name="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE">NP: パラメータは 非
null でなければならないが null 可能としてアノテートされている (NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS
_NULLABLE)</a></h3> | 4897 <h3><a name="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE">NP: パラメータは 非
null でなければならないが null 可能としてアノテートされている (NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS
_NULLABLE)</a></h3> |
4781 | 4898 |
4782 | 4899 |
4783 <p> | 4900 <p> |
4784 このパラメータは、常に 非 null にすることを要求する方法で使われていますが、パラメータには明示的に null 可能としてアノテートされています。 | 4901 このパラメータは、常に 非 null にすることを要求する方法で使われていますが、パラメータには明示的に null 可能としてアノテートされています。 |
4785 パラメータかアノテーションのどちらかの使い方が間違っています。 | 4902 パラメータかアノテーションのどちらかの使い方が間違っています。 |
4786 </p> | 4903 </p> |
4787 | 4904 |
4788 | 4905 |
4789 <h3><a name="NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">NP: 書き込まれていない public または pr
otected フィールドの読み出し (NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)</a></h3> | 4906 <h3><a name="NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">NP: 書き込まれていない public または pr
otected フィールドの読み出し (NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)</a></h3> |
4790 | 4907 |
4791 | 4908 |
4792 <p> | 4909 <p> |
4793 プログラムは、決して null 値でない値を書き込むと思われない public または protected フィールドの null 値を利用しています。 | 4910 プログラムは、決して null 値でない値を書き込むと思われない public または protected フィールドの null 値を利用しています。 |
4794 フィールドが解析によって見られない機構を通して初期化されないかぎり、この値を利用すると NullPointerException が発生します。 | 4911 フィールドが解析によって見られない機構を通して初期化されないかぎり、この値を利用すると NullPointerException が発生します。 |
4795 </p> | 4912 </p> |
4796 | 4913 |
4797 | 4914 |
4798 <h3><a name="NS_DANGEROUS_NON_SHORT_CIRCUIT">NS: 潜在的な非短絡論理の危険な使用 (NS_DANGEROUS_N
ON_SHORT_CIRCUIT)</a></h3> | 4915 <h3><a name="NS_DANGEROUS_NON_SHORT_CIRCUIT">NS: 潜在的な非短絡論理の危険な使用 (NS_DANGEROUS_N
ON_SHORT_CIRCUIT)</a></h3> |
4799 | 4916 |
4800 | 4917 |
4801 <p> | 4918 <p> |
4802 このコードは、短絡論理 (&& や ||) ではなく非短絡論理 (& や |) を使用していると思われます。 | 4919 このコードは、短絡論理 (&& や ||) ではなく非短絡論理 (& や |) を使用していると思われます。 |
4803 さらに、左辺値によって右辺を評価したくない (例外のスローや演算が高くつく副作用があるため) と思っているのかもしれません。 | 4920 さらに、左辺値によって右辺を評価したくない (例外のスローや演算が高くつく副作用があるため) と思っているのかもしれません。 |
4804 非短絡論理は、左辺の結果がわかっていて推論できるときでも、両側の式が評価されます。 | 4921 非短絡論理は、左辺を知ることによって結果を推論できたとしても両側の式が評価されます。 |
4805 これは効率が悪く、右辺の評価でエラーが発生するケースを左辺でガードしているなら、結果としてエラーになる可能性があります。 | 4922 これは効率が悪く、右辺の評価でエラーが発生するケースを左辺でガードしているなら、結果としてエラーになる可能性があります。 |
4806 </p> | 4923 </p> |
4807 <p> | 4924 <p> |
4808 詳細については、<a href="http://java.sun.com/docs/books/jls/third_edition/html/expressio
ns.html#15.22.2">the Java Language Specification</a> を参照してください。 | 4925 詳細については、<a href="http://java.sun.com/docs/books/jls/third_edition/html/expressio
ns.html#15.22.2">the Java Language Specification</a> を参照してください。 |
4809 </p> | 4926 </p> |
4810 | 4927 |
4811 | 4928 |
4812 <h3><a name="NS_NON_SHORT_CIRCUIT">NS: 非短絡論理の疑わしい使用 (NS_NON_SHORT_CIRCUIT)</a></
h3> | 4929 <h3><a name="NS_NON_SHORT_CIRCUIT">NS: 非短絡論理の疑わしい使用 (NS_NON_SHORT_CIRCUIT)</a></
h3> |
4813 | 4930 |
4814 | 4931 |
4815 <p> | 4932 <p> |
4816 このコードは、短絡論理 (&& や ||) ではなく非短絡論理 (& や |) を使用していると思われます。 | 4933 このコードは、短絡論理 (&& や ||) ではなく非短絡論理 (& や |) を使用していると思われます。 |
4817 非短絡論理は、左辺の結果がわかっていて推論できるときでも、両側の式が評価されます。 | 4934 非短絡論理は、左辺を知ることによって結果を推論できたとしても両側の式が評価されます。 |
4818 これは効率が悪く、右辺の評価でエラーが発生するケースを左辺でガードしているなら、結果としてエラーになる可能性があります。 | 4935 これは効率が悪く、右辺の評価でエラーが発生するケースを左辺でガードしているなら、結果としてエラーになる可能性があります。 |
4819 </p> | 4936 </p> |
4820 <p> | 4937 <p> |
4821 詳細については、<a href="http://java.sun.com/docs/books/jls/third_edition/html/expressio
ns.html#15.22.2">the Java Language Specification</a> を参照してください。 | 4938 詳細については、<a href="http://java.sun.com/docs/books/jls/third_edition/html/expressio
ns.html#15.22.2">the Java Language Specification</a> を参照してください。 |
4822 </p> | 4939 </p> |
4823 | 4940 |
4824 | 4941 |
4825 <h3><a name="PZLA_PREFER_ZERO_LENGTH_ARRAYS">PZLA: null ではなく長さが0の配列を返すことを検討する (P
ZLA_PREFER_ZERO_LENGTH_ARRAYS)</a></h3> | 4942 <h3><a name="PZLA_PREFER_ZERO_LENGTH_ARRAYS">PZLA: null ではなく長さが0の配列を返すことを検討する (P
ZLA_PREFER_ZERO_LENGTH_ARRAYS)</a></h3> |
4826 | 4943 |
4827 | 4944 |
4828 <p> | 4945 <p> |
4829 結果がないこと (すなわち、結果の空のリスト) を示すために null 参照ではなく長さが0の配列 を返すことは、多くの場合より良い設計です。 | 4946 結果がないこと (すなわち、結果の空のリスト) を示すために null 参照ではなく長さが0の配列 を返すことは、多くの場合より良い設計です。 |
4830 </p> | 4947 </p> |
4831 <p> | 4948 <p> |
4832 他方では、「この質問に対する答えがない」ことを示すために、null を使うことはおそらく適切です。 | 4949 他方では、「この質問に対する答えがない」ことを示すために null を使用することはおそらく適切です。 |
4833 たとえば、<code>File.listFiles()</code> は、ファイルがないディレクトリを与えられた場合は空のリストを返し、ファイルがディレクトリで
ないなら null を返します。 | 4950 たとえば、<code>File.listFiles()</code> は、ファイルがないディレクトリを与えられた場合は空のリストを返し、ファイルがディレクトリで
ないなら null を返します。 |
4834 </p> | 4951 </p> |
4835 | 4952 |
4836 | 4953 |
4837 <h3><a name="QF_QUESTIONABLE_FOR_LOOP">QF: 複雑か巧妙か間違ったインクリメントの for ループ (QF_QUESTI
ONABLE_FOR_LOOP)</a></h3> | 4954 <h3><a name="QF_QUESTIONABLE_FOR_LOOP">QF: 複雑か巧妙か間違ったインクリメントの for ループ (QF_QUESTI
ONABLE_FOR_LOOP)</a></h3> |
4838 | 4955 |
4839 | 4956 |
4840 <p> | 4957 <p> |
4841 本当にこの for ループが正しい変数をインクリメントしていますか? | 4958 本当にこの for ループが正しい変数をインクリメントしていますか? |
4842 別の変数が for ループによって初期化されてチェックされるように見えます。 | 4959 別の変数が for ループによって初期化されてチェックされるように見えます。 |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4925 ほとんどすべての状況で、結果が null でないなら戻り値を使用したいでしょう。 | 5042 ほとんどすべての状況で、結果が null でないなら戻り値を使用したいでしょう。 |
4926 再び <code>readLine</code> メソッドを呼び出すと異なる行が得られます。 | 5043 再び <code>readLine</code> メソッドを呼び出すと異なる行が得られます。 |
4927 </p> | 5044 </p> |
4928 | 5045 |
4929 | 5046 |
4930 <h3><a name="RV_REM_OF_HASHCODE">RV: ハッシュコードの剰余は負かもしれない (RV_REM_OF_HASHCODE)</a>
</h3> | 5047 <h3><a name="RV_REM_OF_HASHCODE">RV: ハッシュコードの剰余は負かもしれない (RV_REM_OF_HASHCODE)</a>
</h3> |
4931 | 5048 |
4932 | 5049 |
4933 <p> | 5050 <p> |
4934 このコードは、ハッシュコードを計算して別の値を法とする剰余を計算しています。 | 5051 このコードは、ハッシュコードを計算して別の値を法とする剰余を計算しています。 |
4935 ハッシュコードが負かもしれないので、剰余演算の結果も負かもしれません。 | 5052 ハッシュコードは負になり、剰余演算の結果も負なります。 |
4936 </p> | 5053 </p> |
4937 <p> | 5054 <p> |
4938 計算結果が負ではないことを確認したいなら、コードを変更する必要があるかもしれません。 | 5055 計算結果が負ではないことを確認したいなら、コードを変更する必要があるかもしれません。 |
4939 除数が2の累乗であることがわかっているなら、代わりにビット演算を使用できます (すなわち、<code>x.hashCode()%n</code> の代わりに <
code>x.hashCode()&(n-1)</code> を使用してください)。 | 5056 除数が2の累乗であることがわかっているなら、代わりにビット演算を使用できます (すなわち、<code>x.hashCode()%n</code> の代わりに <
code>x.hashCode()&(n-1)</code> を使用してください)。 |
4940 これはおそらく、剰余を計算するより高速です。 | 5057 これはおそらく、剰余を計算するより高速です。 |
4941 除数が2の累乗であるということをわかっていないなら、剰余演算の結果の絶対値を取得してください (すなわち <code>Math.abs(x.hashCode()
%n)</code>)。 | 5058 除数が2の累乗であるということをわかっていないなら、剰余演算の結果の絶対値を取得してください (すなわち <code>Math.abs(x.hashCode()
%n)</code>)。 |
4942 </p> | 5059 </p> |
4943 | 5060 |
4944 | 5061 |
4945 <h3><a name="RV_REM_OF_RANDOM_INT">RV: 符号付き32ビット整数の乱数の剰余 (RV_REM_OF_RANDOM_INT)<
/a></h3> | 5062 <h3><a name="RV_REM_OF_RANDOM_INT">RV: 符号付き32ビット整数の乱数の剰余 (RV_REM_OF_RANDOM_INT)<
/a></h3> |
4946 | 5063 |
4947 | 5064 |
4948 <p> | 5065 <p> |
4949 このコードは符号付き整数の乱数を生成して別の値を法とする剰余を計算しています。 | 5066 このコードは符号付き整数の乱数を生成して別の値を法とする剰余を計算しています。 |
4950 乱数が負かもしれないので、剰余演算の結果も負かもしれません。これが意図したことであることを確実にしてください。 | 5067 乱数は負になり、剰余演算の結果も負になります。これが意図したことであることを確実にしてください。 |
4951 その代わりに <code>Random.nextInt(int)</code> の使用を強く検討してください。 | 5068 その代わりに <code>Random.nextInt(int)</code> の使用を強く検討してください。 |
4952 </p> | 5069 </p> |
4953 | 5070 |
4954 | 5071 |
4955 <h3><a name="RV_RETURN_VALUE_IGNORED_INFERRED">RV: メソッドは戻り値を無視しています、これは間違いではないです
か? (RV_RETURN_VALUE_IGNORED_INFERRED)</a></h3> | 5072 <h3><a name="RV_RETURN_VALUE_IGNORED_INFERRED">RV: メソッドは戻り値を無視しています、これは間違いではないです
か? (RV_RETURN_VALUE_IGNORED_INFERRED)</a></h3> |
4956 | 5073 |
4957 | 5074 |
4958 <p> | 5075 <p> |
4959 このコードは、メソッドを呼び出して、戻り値を無視しています。 | 5076 このコードは、メソッドを呼び出して、戻り値を無視しています。 |
4960 戻り値は、メソッドが呼び出される型と同じ型です。そして、我々の解析から戻り値が重要であるかもしれないように見えます (たとえば、<code>String.toL
owerCase()</code> の戻り値を無視するような)。 | 5077 戻り値は、メソッドが呼び出される型と同じ型です。そして、我々の解析から戻り値が重要であるかもしれないように見えます (たとえば、<code>String.toL
owerCase()</code> の戻り値を無視するような)。 |
4961 </p> | 5078 </p> |
4962 <p> | 5079 <p> |
4963 我々は、戻り値を無視することがメソッド本体の単純な解析から悪い考えかもしれないと推測しています。 | 5080 我々は、戻り値を無視することがメソッド本体の単純な解析から悪い考えかもしれないと推測しています。 |
4964 このメソッドの戻り値を無視することが重要であるか許容できるかどうかに関して、FindBugs に指示する @CheckReturnValue アノテーションが使
えます。 | 5081 このメソッドの戻り値を無視することが重要であるか許容できるかどうかに関して、FindBugs に指示する @CheckReturnValue アノテーションが使
えます。 |
4965 </p> | 5082 </p> |
4966 <p> | 5083 <p> |
4967 戻り値を無視することが間違いではないか決めるために、厳密に調査してください。 | 5084 戻り値を無視することが間違いではないか決めるために厳密に調査してください。 |
4968 </p> | 5085 </p> |
4969 | 5086 |
4970 | 5087 |
| 5088 <h3><a name="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV: 副作用がないメソッドの戻り値は無視される (R
V_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT)</a></h3> |
| 5089 |
| 5090 |
| 5091 <p> |
| 5092 このコードは、メソッドを呼び出して戻り値を無視しています。 |
| 5093 しかしながら、解析はメソッド (もしあればサブクラスの実装も含む) が戻り値以外の効果をもたらさないことを示しています。 |
| 5094 この呼び出しは除去できます。 |
| 5095 </p> |
| 5096 <p> |
| 5097 我々は、できる限り誤検出を減らそうとしていますが、いくつかのケースではこの警告が間違っているかもしれません。 |
| 5098 よくある誤検出です。 |
| 5099 </p> |
| 5100 <p> |
| 5101 - メソッドは、オーバライドされ解析対象外の他のプロジェクトで副作用がもたらされるように設計されている |
| 5102 <p> |
| 5103 <p> |
| 5104 - メソッドは、副作用をもたらすかもしれないクラスローダをトリガーするように呼び出されている |
| 5105 </p> |
| 5106 <p> |
| 5107 - メソッドは、例外を取得するために呼び出されている |
| 5108 </p> |
| 5109 <p> |
| 5110 我々の仮定が正しくないと感じるなら、FindBugs にこのメソッドの戻り値が無視されることを許容するように指示する @CheckReturnValue アノテ
ーションを使用することができます。 |
| 5111 </p> |
| 5112 |
| 5113 |
4971 <h3><a name="SA_FIELD_DOUBLE_ASSIGNMENT">SA: フィールドの二重代入 (SA_FIELD_DOUBLE_ASSIGNM
ENT)</a></h3> | 5114 <h3><a name="SA_FIELD_DOUBLE_ASSIGNMENT">SA: フィールドの二重代入 (SA_FIELD_DOUBLE_ASSIGNM
ENT)</a></h3> |
4972 | 5115 |
4973 | 5116 |
4974 <p> | 5117 <p> |
4975 このメソッドにはフィールドの二重代入があります。<br> | 5118 このメソッドにはフィールドの二重代入があります。<br> |
4976 たとえば以下のようなコードです。 | 5119 たとえば以下のようなコードです。 |
4977 </p> | 5120 </p> |
4978 <blockquote><pre> | 5121 <blockquote><pre> |
4979 int x,y; | 5122 int x,y; |
4980 public void foo() { | 5123 public void foo() { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5020 <p> | 5163 <p> |
5021 そのような代入は役に立たないので、論理エラーかタイプミスかもしれません。 | 5164 そのような代入は役に立たないので、論理エラーかタイプミスかもしれません。 |
5022 </p> | 5165 </p> |
5023 | 5166 |
5024 | 5167 |
5025 <h3><a name="SF_SWITCH_FALLTHROUGH">SF: 1つの case が次の case へと通り抜ける switch 文を発見した
(SF_SWITCH_FALLTHROUGH)</a></h3> | 5168 <h3><a name="SF_SWITCH_FALLTHROUGH">SF: 1つの case が次の case へと通り抜ける switch 文を発見した
(SF_SWITCH_FALLTHROUGH)</a></h3> |
5026 | 5169 |
5027 | 5170 |
5028 <p> | 5171 <p> |
5029 このメソッドには1つの case が次の case へと通り抜ける switch 文があります。 | 5172 このメソッドには1つの case が次の case へと通り抜ける switch 文があります。 |
5030 通常、break か return でこの case を終わらせる必要があります。 | 5173 通常は、break か return でこの case を終わらせる必要があります。 |
5031 </p> | 5174 </p> |
5032 | 5175 |
5033 | 5176 |
5034 <h3><a name="SF_SWITCH_NO_DEFAULT">SF: default がない switch 文を発見した (SF_SWITCH_NO_D
EFAULT)</a></h3> | 5177 <h3><a name="SF_SWITCH_NO_DEFAULT">SF: default がない switch 文を発見した (SF_SWITCH_NO_D
EFAULT)</a></h3> |
5035 | 5178 |
5036 | 5179 |
5037 <p> | 5180 <p> |
5038 このメソッドにはdefault がない switch 文があります。 | 5181 このメソッドにはdefault がない switch 文があります。 |
5039 通常、default を用意する必要があります。 | 5182 通常は、default を用意する必要があります。 |
5040 </p> | 5183 </p> |
5041 <p> | 5184 <p> |
5042 解析は生成されたバイトコードを見るだけなので、default が switch 文の終わりにあって、break 文で終わらないならば、誤警告のトリガーとなりま
す。 | 5185 解析は生成されたバイトコードを見るだけなので、default が switch 文の終わりにあって、他のケースに break 文が含まれていないなら誤検出のト
リガーとなります。 |
5043 </p> | 5186 </p> |
5044 | 5187 |
5045 | 5188 |
5046 <h3><a name="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST: インスタンスメソッドから static フィ
ールドへの書き込み (ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD)</a></h3> | 5189 <h3><a name="ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD">ST: インスタンスメソッドから static フィ
ールドへの書き込み (ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD)</a></h3> |
5047 | 5190 |
5048 | 5191 |
5049 <p> | 5192 <p> |
5050 このインスタンスメソッドは、static フィールドに書き込みをしています。 | 5193 このインスタンスメソッドは、static フィールドに書き込みをしています。 |
5051 複数のインスタンスが操作されているなら、正しくさせるのは難しいです。一般的に間違ったプラクティスです。 | 5194 複数のインスタンスが操作されているなら、正しくさせるのは難しいです。一般的にバッドプラクティスです。 |
5052 </p> | 5195 </p> |
5053 | 5196 |
5054 | 5197 |
5055 <h3><a name="SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: サブクラスで継承できない private な r
eadResolve メソッド (SE_PRIVATE_READ_RESOLVE_NOT_INHERITED)</a></h3> | 5198 <h3><a name="SE_PRIVATE_READ_RESOLVE_NOT_INHERITED">Se: サブクラスで継承できない private な r
eadResolve メソッド (SE_PRIVATE_READ_RESOLVE_NOT_INHERITED)</a></h3> |
5056 | 5199 |
5057 | 5200 |
5058 <p> | 5201 <p> |
5059 このクラスは、private な <code>readResolve</code> メソッドを定義しています。 | 5202 このクラスは、private な <code>readResolve</code> メソッドを定義しています。 |
5060 そのため、このメソッドはサブクラスで継承できません。 | 5203 そのため、このメソッドはサブクラスで継承できません。 |
5061 これが意図したことなら間違っていないかもしれませんが確認するためにレビューするべきです。 | 5204 これが意図したことなら間違っていないかもしれませんが確認するためにレビューするべきです。 |
5062 </p> | 5205 </p> |
5063 | 5206 |
5064 | 5207 |
5065 <h3><a name="SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS">Se: Serializable でないクラ
スの transient フィールド (SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS)</a></h3> | 5208 <h3><a name="SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS">Se: Serializable でないクラ
スの transient フィールド (SE_TRANSIENT_FIELD_OF_NONSERIALIZABLE_CLASS)</a></h3> |
5066 | 5209 |
5067 | 5210 |
5068 <p> | 5211 <p> |
5069 フィールドは、transient と宣言していますが、クラスは直列化可能ではないので、まったく効果がありません。 | 5212 フィールドは、transient と宣言していますが、クラスは直列化可能ではないので、まったく効果がありません。 |
5070 クラスが transient だったときの名残かもしれません、あるいは直列化機構を誤解しているのかもしれません。 | 5213 クラスが transient だったときの名残かもしれません、または直列化機構を誤解しているのかもしれません。 |
5071 </p> | 5214 </p> |
5072 | 5215 |
5073 | 5216 |
5074 <h3><a name="TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK">TQ: 値は型修飾子を必要
としているが、不明としてマークされている (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK)</a><
/h3> | 5217 <h3><a name="TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK">TQ: 値は型修飾子を必要
としているが、不明としてマークされている (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_ALWAYS_SINK)</a><
/h3> |
5075 | 5218 |
5076 | 5219 |
5077 <p> | 5220 <p> |
5078 値は、常に型修飾子によって示された値であることを必要とする方法で使われています。 | 5221 値は、常に型修飾子によって示された値であることを必要とする方法で使われています。 |
5079 しかし、値はどこでその型修飾子が必要なのかわからないと述べている明示的なアノテーションがあります。 | 5222 しかし、値はどこでその型修飾子が必要なのかわからないと述べている明示的なアノテーションがあります。 |
5080 使い方かアノテーションのどちらかが間違っています。 | 5223 使い方かアノテーションのどちらかが間違っています。 |
5081 </p> | 5224 </p> |
5082 | 5225 |
5083 | 5226 |
5084 <h3><a name="TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK">TQ: 値は型修飾子を必要と
しないが、不明としてマークされている (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK)</a></h3
> | 5227 <h3><a name="TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK">TQ: 値は型修飾子を必要と
しないが、不明としてマークされている (TQ_EXPLICIT_UNKNOWN_SOURCE_VALUE_REACHES_NEVER_SINK)</a></h3
> |
5085 | 5228 |
5086 | 5229 |
5087 <p> | 5230 <p> |
5088 値は、型修飾子によって示された値でないことを必要とする方法で使われています。 | 5231 値は、型修飾子によって示された値でないことを必要とする方法で使われています。 |
5089 しかし、値はどこでその型修飾子がいるのか禁止されていのるかわからないと述べている明示的なアノテーションがあります。 | 5232 しかし、値はどこでその型修飾子がいるのか禁止されていのるかわからないと述べている明示的なアノテーションがあります。 |
5090 使い方かアノテーションのどちらかが間違っています。 | 5233 使い方かアノテーションのどちらかが間違っています。 |
5091 </p> | 5234 </p> |
5092 | 5235 |
5093 | 5236 |
| 5237 <h3><a name="UC_USELESS_CONDITION">UC: 条件は効果がない (UC_USELESS_CONDITION)</a></h3> |
| 5238 |
| 5239 |
| 5240 <p> |
| 5241 この条件は常に関係している変数の値が前に絞られたのと同じ結果を作り出します。 |
| 5242 おそらく何かほかのことを意味していたのか、あるいは条件を除去できます。 |
| 5243 </p> |
| 5244 |
| 5245 |
| 5246 <h3><a name="UC_USELESS_CONDITION_TYPE">UC: 条件は変数型のために効果がない (UC_USELESS_CONDITIO
N_TYPE)</a></h3> |
| 5247 |
| 5248 |
| 5249 <p> |
| 5250 この条件は関係している変数の型範囲のために常に同じ結果を作り出します。 |
| 5251 おそらく何かほかのことを意味していたのか、あるいは条件を除去できます。 |
| 5252 </p> |
| 5253 |
| 5254 |
| 5255 <h3><a name="UC_USELESS_OBJECT">UC: 役に立たないオブジェクトを作成した (UC_USELESS_OBJECT)</a></h
3> |
| 5256 |
| 5257 |
| 5258 <p> |
| 5259 我々の解析でオブジェクトが役に立たないことを示しています。 |
| 5260 作成され、変更されていますが、値はメソッドの外に出ないし、副作用をもたらしません。 |
| 5261 間違いかオブジェクトが使われることを意図していたかのどちらか、あるいは除去できます。 |
| 5262 </p> |
| 5263 <p> |
| 5264 この解析はめったに誤検出することはありません。よくある誤検出のケースです。 |
| 5265 </p> |
| 5266 <p>- 暗黙のうちに曖昧な例外をスローした</p> |
| 5267 <p>- コードを一般化してスタブとして使用された</p> |
| 5268 <p>- 弱/ソフト参照オブジェクトへの強い参照を持っていた</p> |
| 5269 |
| 5270 |
| 5271 <h3><a name="UC_USELESS_OBJECT_STACK">UC: 役に立たないオブジェクトをスタックで作成した (UC_USELESS_OBJ
ECT_STACK)</a></h3> |
| 5272 |
| 5273 |
| 5274 <p> |
| 5275 このオブジェクトは副作用を持たない修正を行うために作成されています。 |
| 5276 おそらく何かほかのことを意味していたのか、あるいはオブジェクトを除去できます。 |
| 5277 </p> |
| 5278 |
| 5279 |
| 5280 <h3><a name="UC_USELESS_VOID_METHOD">UC: 役に立たない空ではない void メソッド (UC_USELESS_VOID_
METHOD)</a></h3> |
| 5281 |
| 5282 |
| 5283 <p> |
| 5284 我々の解析は、この空ではない void メソッドが実際に有用な仕事を行わないことを示しています。 |
| 5285 確認してください。おそらくそのコードが間違っているか、またはボディを完全に除去できます。 |
| 5286 </p> |
| 5287 <p> |
| 5288 我々はできる限り誤検出を減らそうと努力しているが、いくつかのケースでは警告は間違っているかもしれません。 |
| 5289 よくある誤検出例です。 |
| 5290 </p> |
| 5291 <p> |
| 5292 - メソッドは、副作用を持つかもしれないクラスのロードをトリガすることを意図している |
| 5293 </p> |
| 5294 <p> |
| 5295 - メソッドは、暗黙のわかりにくい例外をスローするように意図されている |
| 5296 </p> |
| 5297 |
| 5298 |
5094 <h3><a name="UCF_USELESS_CONTROL_FLOW">UCF: 役に立たない制御フロー (UCF_USELESS_CONTROL_FLO
W)</a></h3> | 5299 <h3><a name="UCF_USELESS_CONTROL_FLOW">UCF: 役に立たない制御フロー (UCF_USELESS_CONTROL_FLO
W)</a></h3> |
5095 | 5300 |
5096 | 5301 |
5097 <p> | 5302 <p> |
5098 このメソッドには分岐するのかどうかに関係なく、制御フローが同じ場所へと続く、役に立たない制御フロー文があります。<br> | 5303 このメソッドには分岐するのかどうかに関係なく、制御フローが同じ場所へと続く、役に立たない制御フロー文があります。<br> |
5099 たとえば、これは 空の <code>if</code> 文が原因になります。 | 5304 たとえば、これは 空の <code>if</code> 文が原因になります。 |
5100 </p> | 5305 </p> |
5101 <blockquote><pre> | 5306 <blockquote><pre> |
5102 if (argv.length == 0) { | 5307 if (argv.length == 0) { |
5103 // TODO: handle this case | 5308 // TODO: handle this case |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5146 どこかほかで、値がロードされて、null チェックなしで null 値が利用されます。 | 5351 どこかほかで、値がロードされて、null チェックなしで null 値が利用されます。 |
5147 フィールドが初期化される前に利用されると NullPointerException が発生するので、誤りか疑わしい設計かもしれません。 | 5352 フィールドが初期化される前に利用されると NullPointerException が発生するので、誤りか疑わしい設計かもしれません。 |
5148 </p> | 5353 </p> |
5149 | 5354 |
5150 | 5355 |
5151 <h3><a name="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">UwF: 書き込まてれいない public または
protected フィールド (UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)</a></h3> | 5356 <h3><a name="UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD">UwF: 書き込まてれいない public または
protected フィールド (UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD)</a></h3> |
5152 | 5357 |
5153 | 5358 |
5154 <p> | 5359 <p> |
5155 この public または protected フィールドは書き込まれていません。このフィールドからの読み出しはデフォルト値を返します。 | 5360 この public または protected フィールドは書き込まれていません。このフィールドからの読み出しはデフォルト値を返します。 |
5156 誤りをチェックしてください (フィールドは初期化するべきでしたか?)。使わないなら除去してください。 | 5361 誤りをチェックしてください (フィールドは初期化するべきでしたか?)。役に立たないなら除去してください。 |
5157 </p> | 5362 </p> |
5158 | 5363 |
5159 | 5364 |
5160 <h3><a name="XFB_XML_FACTORY_BYPASS">XFB: XMLインタフェースの特定の実装のインスタンスを作成しているメソッド (XF
B_XML_FACTORY_BYPASS)</a></h3> | 5365 <h3><a name="XFB_XML_FACTORY_BYPASS">XFB: XMLインタフェースの特定の実装のインスタンスを作成しているメソッド (XF
B_XML_FACTORY_BYPASS)</a></h3> |
5161 | 5366 |
5162 | 5367 |
5163 <p> | 5368 <p> |
5164 このメソッドは、XMLインタフェースの特定の実装のインスタンスを作成しています。 | 5369 このメソッドは、XMLインタフェースの特定の実装のインスタンスを作成しています。 |
5165 実装が実行時に変更できるように、これらのオブジェクトを作成するために提供されたファクトリクラスを使うことが望ましいです。<br> | 5370 提供されたファクトリクラスを使用してオブジェクトを作成して実行時に実装を変更できるようにすることが望ましいです。<br> |
5166 詳細は、以下を参照してください。 | 5371 詳細は、以下を参照してください。 |
5167 </p> | 5372 </p> |
5168 <ul> | 5373 <ul> |
5169 <li>javax.xml.parsers.DocumentBuilderFactory</li> | 5374 <li>javax.xml.parsers.DocumentBuilderFactory</li> |
5170 <li>javax.xml.parsers.SAXParserFactory</li> | 5375 <li>javax.xml.parsers.SAXParserFactory</li> |
5171 <li>javax.xml.transform.TransformerFactory</li> | 5376 <li>javax.xml.transform.TransformerFactory</li> |
5172 <li>org.w3c.dom.Document.create<i>XXXX</i></li> | 5377 <li>org.w3c.dom.Document.create<i>XXXX</i></li> |
5173 </ul> | 5378 </ul> |
5174 | 5379 |
5175 | 5380 |
5176 | 5381 |
5177 | 5382 |
5178 <hr> <p> | 5383 <hr> <p> |
5179 <script language="JavaScript" type="text/javascript"> | 5384 <script language="JavaScript" type="text/javascript"> |
5180 <!---//hide script from old browsers | 5385 <!---//hide script from old browsers |
5181 document.write( "Last updated "+ document.lastModified + "." ); | 5386 document.write( "Last updated "+ document.lastModified + "." ); |
5182 //end hiding contents ---> | 5387 //end hiding contents ---> |
5183 </script> | 5388 </script> |
5184 <p> Send comments to <a class="sidebar" href="mailto:findbugs@cs.umd.edu">findbu
gs@cs.umd.edu</a> | 5389 <p> Send comments to <a class="sidebar" href="mailto:findbugs@cs.umd.edu">findbu
gs@cs.umd.edu</a> |
5185 <p> | 5390 <p> |
5186 <A href="http://sourceforge.net"><IMG src="http://sourceforge.net/sflogo.php?gro
up_id=96405&type=5" width="210" height="62" border="0" alt="SourceForge.net
Logo" /></A> | 5391 <a href="http://sourceforge.net/projects/findbugs/"><img src="http://sourceforge
.net/sflogo.php?group_id=96405&type=5" width="210" height="62" border="0" al
t="FindBugs on SourceForge.net" /></a> |
5187 </td></tr></table> | 5392 </td></tr></table> |
5188 </body></html> | 5393 </body></html> |
OLD | NEW |