FindBugs に指摘されたこと
FindBugs 曰く「このメソッドは、データベースリソース(例えば、コネクションや結果セット)を生成しますが、それをフィールドに代入したり、他のメソッドに渡したり、戻り値として返送したりしておらず、このメソッドを起点とする実行経路の中にクローズが行われない経路があります」
dao/SqlDaoBean.java
protected int getHospNum() { ・ ・ try { con = getConnection(); st = con.createStatement(); ResultSet rs = st.executeQuery(sql); if (rs.next()) { hospNum = rs.getInt(1); } } catch (SQLException e) { processError(e); } catch (Exception e) { processError(e); } finally { //↓ FindBugs に指摘された closeConnection(con); closeStatement(st); //↑ } ・ ・
FindBugs曰く「このメソッドの中にあるswitch文には、同じコードがあります。単なるコードの重複かもしれませんが、コーディングミスの可能性もあります」
client/KartePane.java 他
private void controlMenus(ActionMap map) { // 各Stateはenableになる条件だけを管理する switch (curState) { case NONE: break; case SOA: // SOAPaneにFocusがありテキスト選択がない状態 if (getTextPane().isEditable()) { map.get(GUIConst.ACTION_PASTE).setEnabled(canPaste()); map.get(GUIConst.ACTION_INSERT_TEXT).setEnabled(true); map.get(GUIConst.ACTION_INSERT_SCHEMA).setEnabled(true); } break; case SOA_TEXT: case P_TEXT: // ←ここに持ってきた // SOAPaneにFocusがありテキスト選択がある状態 map.get(GUIConst.ACTION_CUT).setEnabled(getTextPane().isEditable()); map.get(GUIConst.ACTION_COPY).setEnabled(true); boolean pasteOk = (getTextPane().isEditable() && canPaste()) ? true : false; map.get(GUIConst.ACTION_PASTE).setEnabled(pasteOk); break; case P: // PPaneにFocusがありテキスト選択がない状態 if (getTextPane().isEditable()) { map.get(GUIConst.ACTION_PASTE).setEnabled(canPaste()); map.get(GUIConst.ACTION_INSERT_TEXT).setEnabled(true); map.get(GUIConst.ACTION_INSERT_STAMP).setEnabled(true); } break; // case P_TEXT: // こっちは pasteOk が boolean 宣言されないけど,同じことみたい // // PPaneにFocusがありテキスト選択がある状態 // map.get(GUIConst.ACTION_CUT).setEnabled(getTextPane().isEditable()); // map.get(GUIConst.ACTION_COPY).setEnabled(true); // pasteOk = (getTextPane().isEditable() && canPaste()) ? true : false; // map.get(GUIConst.ACTION_PASTE).setEnabled(pasteOk); // break;
FindBugs 曰く「Exceptionが発生しないのにExceptionをキャッチしています。このtry-catchブロックはtry節の中でExceptionをスローしないのにExceptionのキャッチ節があり・・・」
Exception を catch するのに,いろいろある Exception をいちいち catch するのは面倒くさいので,まとめて catch (Exception e) で処理していたのだが,FindBugs にそれはだめだと指摘された。そこで,ものすごい数だったけど全部 Exception を書き直してみたところ,確かに今まで見なかった Exception が catch されたりした。しかし,大きな問題になるようなものはなかったので,結局無駄骨だった。でも勉強になったからよしとする。
FindBugs 曰く「compareTo(...)を宣言し、Object.equals()を使用しています。このクラスは、compareTo(...)を宣言していますがequals()をjava.lang.Objectから継承しています。一般にcompareToが0を返す条件は、equalsがtrueを返す条件と一致する必要があります。これを守らないと複雑で予測不可能な問題が、例えばPriorityQueueで発生するでしょう。Java 5では、PriorityQueue.remove()は、compareTo()を使用していますがJava 6では、equals()を使用しています」
言われたとおり,(x.compareTo(y)==0) == (x.equals(y)) となるように,equals を実装する。必要ないような気もする。
infomodel/AllergyModel.java 他
/** * 同定日で比較する。 * @param other 比較対象オブジェクト * @return 比較値 */ public int compareTo(Object other) { if (other != null && getClass() == other.getClass()) { String val1 = getIdentifiedDate(); String val2 = ((AllergyModel)other).getIdentifiedDate(); return val1.compareTo(val2); } return 1; } //↓ @Override public boolean equals (Object other) { if ((other instanceof AllergyModel) && compareTo(other) == 0) { return true; } else { return false; } } //↑
他にもたくさん
« Stamp あるいは Schema を編集しただけの場合 | トップページ | カルテ保存後ウインドウを閉じる(多分完結編) »
「OpenDolphin」カテゴリの記事
- Java 17 への移行(7) - OpenDolphin client の対応 (2023.02.04)
- Java 17 への移行(6) - Hibernate 6 でやらかす(2023.02.03)
- Java 17 への移行(5) - OpenDolphin server の対応(2023.02.02)
- Java 17 への移行(4) - OpenSearch の準備 [ubuntu 編](2023.02.01)
- Java 17 への移行(3) - OpenSearch の準備 [mac 編](2023.01.31)