警告とヒント
さて。Eclipseでいうところのコンパイラが出すエラー/警告に関するところはNetBeansでは「ヒント」というのは昨日の日記でまとめた通りですが、今日は実際にそれぞれ設定できる内容を比較してみたいと思います。
まずは、Eclipseのエラー/警告からです。そもそもの大前提として、Eclipseの場合はチェック項目に対し、違反している場合にそれを無視するか警告するかエラーにするかを設定できます。で、実際に設定できる内容は以下の通りです。
- コード・スタイル
- 潜在的なプログラミングの問題
- 名前のシャドーイングおよび競合
- フィールド宣言が他のフィールドまたは変数を隠蔽
- ローカル変数宣言が他のフィールドまたは変数を隠蔽
- コンストラクターまたはsetterメソッド・パラメータを含む
- 型パラメータが別の型を隠蔽
- メソッドがパッケージ可視メソッドを非オーバーライド
- インターフェース・メソッドがprotectedの'Object'メソッドと競合
- 使用すべきでは無い制限されたAPI
- 不要なコード
- ローカル変数が読み取られない
- パラメータが読み取られない
- オーバーライドしたメソッドの実装を無視
- @paramタグのパラメータ記述を無視
- 未使用のインポート
- 未使用のローカルまたはprivateメンバー
- 冗長なnull検査
- 不要なelseステートメント
- 不要なキャストまたはinstanceof操作
- 不要な例外スロー宣言
- オーバーライドしたメソッドの実装を無視
- @throwsまたは@exceptionタグの例外ドキュメントを無視
- ExceptionおよびThrowableを無視
- 未使用のbreakまたはcontinueラベル
- 冗長なスーパー・インターフェース
- 総称型
- 未検査の総称型操作
- raw型の使用
- finalな型で制約された総称型パラメータ
- 注釈
日本語の文章で書かれてもいまいち意味が分かりづらいものもありますが、まぁそれはさておき、一方のNetBeansのヒントの方も、基本的にはチェック項目に対し、違反している場合にそれを無視するか警告するかエラーにするかを設定できます。警告には、単なる「警告」と「現在の行の警告」の二種類があるようですが、いまいち意味が分かりません。で、実際に設定できる内容は以下の通りです。
- インポート
- 未使用のインポート
- 禁止パッケージからのインポート
- 同じパッケージからのインポート
- スターインポート
- java.langパッケージからのインポート
- Javadoc
- Javacの標準的な警告
- オーバーライド
- 不要なキャスト
- 直列化
- フォールスルー
- 未検査
- ゼロで除算
- ifのあとの文が空
- finally
- 非推奨
- エラー修正
- 局所変数を作成
- tryとcatchで囲む
- API
- NetBeans開発
- 取り消し可能なタスクに対し、cancel()が空
- instanceOf演算子の使い方が不正
- JDK1.5以降
- @Override注釈を追加
- スーパーインターフェースとして注釈を使用しない
- 空の文
- forの後の文が空
- whileの後の文が空
- if/elseの後の文が空
- 空の文
- doの後の文が空
- 一般
- 足りないhashCodeまたはequalsを生成
- == または != を使用して文字列を比較
- 二重検査されたロック
- 自信に割り当て
- 参照から静的フィールドにアクセス
- フィールドが別のフィールドを隠蔽
- 新しい変数に戻り値を割り当て
- 間違ったパッケージ
- 局所変数がフィールドを隠蔽
- 中括弧
- If-Else文には中括弧が必要
- Do-While文には中括弧が必要
- Whileループには中括弧が必要
- Forループには中括弧が必要
どれがどれに対応するのか微妙に分かりづらいのでなんとも言えませんが、とりあえずぱっと見で目につくのは、「総称型(ジェネリックス)」「注釈(アノテーション)」「ボクシング・アンボクシング」等の、Java5からの機能に関する設定項目はかなりEclipseの方が多そうに見えます。その他は・・・うーん・・・単体で見れば微妙にEclipseの方が充実していそうな気がしないでもありませんが、checkstyleやfindbugsと組み合わせれば補えそうなので、特にNetBeansでも不自由しなさそうな気もします。
それにしても、世間一般的には「新機能への対応はNetBeansの方が早い」ようなことが言われているような気がするのですが、ことJava5周りに関しては微妙に対応が鈍い(ジェネリックス周りのコード補完が効くようになったのも最近だったような)気がするのは何故でしょう。
というか、その辺は微妙に従来NetBeansがEclipseに比べて弱いと言われてきたコーディングアシスト機能的なところなので、仕方ないと言えば仕方ないか
・・・
いやいや、仕方なくは無いか
フォーマッタとかテンプレートとかも比較してみたかったのですが、疲れてきたのでまた次回以降にします。