Vintage Metal Trinkets 6/Pkg-Like Heart Clips 1.4"X1.3" (並行輸入品) 【ポイント2倍】 パロマ 用/右強火タイプ通販正規販売店

[JR-N121A S アクア 121L 2ドアノンフロン冷凍冷蔵庫 シルバー:アクア,[ツインバード 2電源式コンパクト電子保冷保温ボックス D-CUBE L HR-DB07GY,[アビテラックス ACF-110E 直冷式 前開き冷凍庫 100L (ACF110E),[ピュアフォーマー他 交換カートリッジ2本セット|アルテック純正浄水フィルター,[送料無料 INAX キッチンパーツ 交換用 浄水カートリッジ カートリッジ内蔵型浄水器専用水栓 (4本入り) JF-53-F 品番 : JF-53-F-LOL,[マルチピュア アクアドーム用カートリッジ CB6AD,[SEAパック浄水&洗浄カートリッジMW-7000DN(3本セット)+CL-7000(3本セット)■SEAパック洗浄用フィルターが付いたお得なセットアクアプロセスMW-7000HG相当SEA,[パナソニック 浄水器カートリッジ TK71601,[水田 循環式精米機 MH-150 (1斗張り) [r11][s3-180][w3000],[象印 VE電気まほうびん 2.2L ベージュ CV-TW22-CA.

Tags: デロンギ アイコナ 電気ケトル レッド KBO1200J-R 電気ケトル デロンギ (DeLonghi):デロンギ・ジャパン 在庫切れ デロンギ アイコナヴィンテージコレクション 電気ケトル KBOV1200J Panasonic 1.8L 〜1升 スチーム可変圧力IHジャー炊飯器 SR-SPX184-RK ルージュブラック 送料無料(沖縄県を除く) 象印 炊飯器 圧力IH式 5.5合炊き ホワイト NP-YS10-WA 象印 マイコン炊飯ジャー NL-CS18【送料無料】 【送料無料】 象印 小容量マイコン炊飯ジャー 極め炊き(R) NL-BB05 象印 海外向け IH炊飯器(1.8L) NP-HLH18XA (AC220-230V仕様) 業務用IH炊飯ジャー タイガー魔法瓶 IH炊飯ジャー 炊きたて JKH-S18P 2合1升炊き タイガー 炊飯器 一升 圧力 IH ブルーブラック 炊きたて 炊飯 ジャー JPB-G181-KA Tiger タイガー IH炊飯ジャー 「炊きたて」(1升) JKT-180BK ブラック 【ビックカメラグループオリジナルモデル】

[Midea Automatic Rice Cooker, Steamer, Slow Cooker Convenient, Versatile Co,[ホットプレートEAJB20-SA 象印,[ピエリア ミニホットプレート 揚げタコ焼きプレート付 1200W レッド DHP-1502 RD,[象印 グリルなべ ブラウン EP‐PE10‐TA,[イデアインターナショナル BRUNO コンパクトホットプレート グリーン [グリーン、緑][本体:幅37.5×奥行23.5×高さ13.5] / BOE021-GR,[ホットプレート やきやき(R) プレート2枚 ダークブラウン(TD) EA-BJ20,[在庫切れ 象印 ホットプレート やきやき EA-BD10 GHT5601,[Waring 4 Slice Toaster White,[Toastmaster 2スライストースターby Toastmaster,[ドイツ Ritter リッター社 電動スライサー contura3.

Tags: パナソニック(家電) コードレス電話機(子機1台付き)(パールホワイト) VE-GD72DL-W パナソニック(家電) コードレス電話機(子機2台付き)(ピンクゴールド) VE-GD55DW-N※他の商品と同梱不可 (まとめ)ツインバード マイジュースミキサー Asa no mix ベリーピンク KC-4818P〔×2セット〕 象印 ミルつきミキサー お茶ミル容器つき BM-RT08-GA bodumボダム ビストロ 電気式コーヒーグラインダー レッド コーヒーマシーン、コーヒーメーカー、台所用品、嗜好品、海外人気、コーヒー、珈琲、喫茶店8CT French Roast Carafe 正規輸入品 WB 6 Qt. Round Crockery Cooker Estilo 3 Sided Grill Brush with Stainless Steel Bristles, 12' [並行輸入品] Yukon Glory 6-Piece Skewer and Grill Rack Set, Heavy Duty Stainless Steel お取り寄せ 時間指定不可 N3S07PWAS6STE-12A13A ノーリツ PROGRE Light(プログレライト) 左右強火力 都市ガス用 75cmタイプ ビルトインガスコ

[【業務用】【送料別】IT 魚焼器 FY-6 13A,[(業務用)(新品) タニコー ガステーブル(ウルティモシリーズ) TSGT-0920A W900×D750×H800 都市ガス/LPガス トップバーナφ190×2 (送料無料),[【3年保証0円/工事付なら5年】*パロマ*ガスビルトインコンロ ガラス天板60cm水無片面焼PD-KN52AV-60G[R/L],[リンナイ RHS72W22E3RC-STW-13A グリル付ガスビルトインコンロ 『デリシア』 (12A/13A用) (RHS72W22E3RCSTW13A),[ガスコンロ 都市ガス プロパン 2口 ガステーブルコンロ クリスタルコート シルバー LPG用 KGM63VTGR リンナイ,[(都市ガス 大バーナー右) RT64JH6S-GR-13A リンナイ ガステーブル テーブルコンロ ガスコンロ 2口,[パロマ PA-360WHA-L-LP 【幅59cm】【両面焼きグリル】【左強バーナー】【プロパンガス】据置ガスコンロ(ナチュラルホワイト) (PA360WHALLP),[Paloma/パロマ PA-N40VA-R ガステーブル あじわざ (プロパンガス用) クリスタルグレー 【強火力右】,[【nightsale】 Paloma/パロマ IC-N86SH-L ガステーブル シロノ (プロパンガス用) 【強火力左】,[アビテラックス 電子レンジフラットタイプ(家庭用) ヘルツフリー ARF205-W.

Tags: 象印マホービン マイコン沸とう電動ポット 2.2L CD-WY22-HA ZOJIRUSHIオーブントースター 031-04B ZEPEAL ヘルツフリー単機能電子レンジ 18L DR-M2016F バルミューダ・トースター 011-01B シャープ 空気清浄機 FU-G51W SHARPオーブンレンジ 338-06B(同梱・代引不可) 在庫切れ ★TOSHIBA / 東芝 石窯ドーム ER-ND8 【電子レンジ・オーブンレンジ】 在庫切れ 【新品・送料無料】東芝(TOSHIBA) 石窯ドーム ER-ND300(W) [グランホワイト] 在庫切れ ★3つ星 ビストロ NE-BS802-K [ブラック] 【電子レンジ・オーブンレンジ】 電子レンジ・オーブンレンジ シャープ AX-AP300-W

スマートフォン用の表示で見る

にょきにょきブログ

Vintage Metal Trinkets 6/Pkg-Like Heart Clips 1.4"X1.3" (並行輸入品) 【ポイント2倍】 パロマ 用/右強火タイプ大人気通販情報

SHARP オーブンレンジ 20L ホワイト系 RE-S205-W 適切な Java コーディングのために心がけること

良いコードを書くために心がけることを箇条書き。


Close 処理を finally で行う

ダメな例

InputStreamReader reader = new HogeInputStreamReader(...);
doSomething(reader);
reader.close();

doSomething(reader); で Exception が発生した場合に close されない。
close 処理は必ず finally 節で行い、確実に close されるようにする。

良い例

InputStreamReader reader = null;
try{
 reader = new HogeInputStreamReader(...);
 doSomething(reader);
} finally {
 if( reader != null )
 reader.close();
}

close 処理に限らず、dispose 等でも同様に finally 節を使う。
リソースリークは発見・再現が困難なバグなので、確実に防ぐことを心がける。


equals メソッドをオーバーライドした場合は hashCode メソッドもオーバーライドする

これを守らなければ悲惨なことになる。。

HashMap を例に考える。
まず下記のようなクラスを作る。

// hashCode メソッドをオーバーライドしていない
public class BadClass {
 @Override
 public boolean equals(Object obj) {
 return true;
 }
}

ではこの BadClass の挙動を確認。

public static void main(String[] args) throws Exception {
 BadClass bad1 = new BadClass();
 BadClass bad2 = new BadClass();
 System.out.println(bad1.hashCode());
 System.out.println(bad2.hashCode());
 System.out.println(bad1.equals(bad2));
}
// 実行結果
623839641
857681633
true

以上、ハッシュコードが異なる等しいオブジェクトができた。

さてこの BadClass のインスタンス bad1, bad2 を用いて HashMap を利用してみよう。

Map<BadClass, String> map = new HashMap<BadClass, String>();
map.put(bad1, "a string value");
System.out.println(map.get(bad2));

このコードを実行すると、何が表示されるか?
bad1.equals(bad2) は true なので、 "a string value" と表示することを期待するかもしれない。だがそれは間違いだ 。map.get(bad2) は null を返す。これは、HashMap 内で bad1 の hashCode が挿入に使われ、次に map.get(bad2) で検索される bad2 の hashCode は bad1 の hashCode とは異なるからだ。
つまり、equals をオーバーライドする時は下記の二点に注意すること。
・equals をオーバーライドする時は hashCode もオーバーライドすること
・等しいオブジェクトは等しいハッシュコードを返すこと


引数の型を Object にしない

本当に全てのオブジェクトに対して操作可能なメソッドなら良いが、そうでない場合、つまりいくつかの受け入れ可能な型があり、それらの共通のクラスが Object であるような場合は、受け入れ可能なクラスの数だけメソッドをオーバーロードすること。

例えば javax.imageio.ImageIO の createImageInputStream(Object) メソッドを見てみよう。

public static ImageInputStream createImageInputStream(Object input) throws IOException
指定された Object から入力を取得する ImageInputStream を返します。

http://java.sun.com/javase/ja/6/docs/ja/api/javax/imageio/ImageIO.html#createImageInputStream(java.lang.Object)

この getImageReaders は InputStream, File, RandomAccessFile を渡せば適切な ImageInputStream が返されるが、シグニチャだけではその情報は得られない。これらのクラスのインスタンスではないオブジェクトを渡すと null が返される。これは適切な パナソニック IHクッキングヒーター Jシリーズ H KZ-J75HS 2口IH + ラジエンド 幅75cm シルバーAPI では無い。引数を見て何を渡せば良いのかが明らかであること。それが適切なAPIだ。


メソッドのシグニチャで throws Exception しない

上記と似たような話だが、throws Exception はあまりに範囲が広いので、もう少し型を限定し、API使用者に情報を提供する。

例えば下記のようなコードではどのような例外が返されるかわからない。

get(long id) throws Exception 

それが下記のように、SQLException が返されるのが明らかであれば、このメソッドはデータベースに接続してデータを取得することが明らかだ。

get(long id) throws SQLException

このように、throws 節はメソッドの中身を推測できる情報なので、安易に throws Exception と書いてはならない。


throw new RuntimeException(e) しない

これも同様。throws 節を書くのが面倒だとか、適切な RuntimeException のサブクラスを作るのが面倒だとかという理由で安易に RuntimeException で包んではならない。
必ず適切な例外クラスを作成すること。

try{
 ...
} catch( Exception e) {
 // これをやってはいけない
 // 適切な例外クラスを作成すること。
 throw new RuntimeException(e);
}

引数の配列を直接フィールドに格納しない、直接返さない

配列オブジェクトの参照をクラス外部でも保持していることのメリットはほとんど無く、デメリットが多い。不変性を破られたり不正な状態になったりなど、想定外の挙動をしてしまうことがある。配列オブジェクトに限らず全てのオブジェクトなら同様であるが、特に配列オブジェクトに関しては気づかずに不正な状態を作ってしまうことが多い。
配列のやり取りはコピーを伴うこと。


Throwable を catch しない

明確な理由が無い限り、Throwable は catch しない。
Exception と異なり Error は致命的な場合があり、Throwable で十把一絡げに処理してはならない。
せめて Error と Exception は異なる catch 節で受け取り、Error を catch する理由をコメントに記述しておくこと。


Null チェックを行う

null になりうるものは null チェックを行う。
引数で渡されたオブジェクトの null チェックを怠り、別のメソッドにそのまま渡してそのメソッド先で NullPointerException が発生した場合はどの時点で null だったのかを判別しにくい。そのため、できるだけ入念に Null チェックを行い、NullPointerException 発生時には即座に原因を特定出来るようにすること。。

また、特に例外処理時には入念に null チェックを行うこと。何らかの例外を適切に処理したつもりでもそこで NullPointerException が出てしまったら目も当てられない。必ず null チェックを行うか、null が来ないことを確かめて例外処理を行なうこと。


Collection を返すメソッドは null を返さず、空 Collection を返す

「処理失敗時には null を返す」ような規約がない場合、空 Collection を返すこと。
また、null を返さないことが保証出来る場合、クライアント側の null チェックを省くようドキュメント化すること。

型パラメーターへのキャストを行わない

型パラメーターへのキャストは型安全性を崩壊させるので行なってはいけない。
参考:型パラメーターへのキャストは絶対に行ってはいけない


プリミティブラッパークラスを new しない

パフォーマンスのために自分で new しない。valueOf メソッドを使用する。valueOf メソッドを用いて得たインスタンスは、値によってはキャッシュ済みのインスタンスを返すので不要なオブジェクトを作らなくて済む。

new した例

Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 == i2);
// 実行結果
false

valueOf を使う例

Integer i1 = Integer.valueOf(1);
Integer i2 = Integer.valueOf(1);
System.out.println(i1 == i2);
// 実行結果
true

現在の Java の実装では、-128 〜 +127 までの範囲をキャッシュしているようだ。


文字列を == で比較しない

文字列もれっきとしたオブジェクトなので等価比較ではなく同値比較すること

。文字列は不変オブジェクトなので等価比較したい場合は(おそらく)存在しない。equals メソッドや、より安全に CS-G38VNS 三菱電機 IHクッキングヒーター 2口IH 60cmシルバー グリルディッシュ付[新品]apache commons 等の StringUtil を使用して比較すること。

スターをつけました

引用をストックしました

引用するにはまずログインしてください

引用をストックできませんでした。再度お試しください

限定公開記事のため引用できません。。。

読者です 読者をやめる 読者になる 読者になる
{yahoojp}xt01-myp07-gui-2465