adidas アディダス Condivo14 トレーニングユニフォーム 半袖 メンズ D83101 AB2737 SPORTS オリジナルスのアウトレット通販

adidas アディダス Condivo14 トレーニングユニフォーム 半袖 メンズ D83101 AB2737 SPORTS オリジナルス

adidas アディダス az 5本指クロステーピンググリップソックス スピード 靴下 レディース メンズ A95999,adidas アディダス SC ボンボンキャスケット ウィメンズ レディース S06334,adidas アディダス ST モノグラムTシャツ メンズ メンズ A97635,adidas アディダス SC スウェットトートバッグ ウィメンズ レディース S06356. adidas アディダス メンズ SQ ランニング 長袖Tシャツ メンズ S03019,adidas アディダス ミニー リュック Disney・ディズニー レディース S14702,adidas アディダス メンズ CL BASE ポロシャツ メンズ S24896,adidas アディダス メンズ CLX 起毛長袖 Tシャツ メンズ S06638.adidas アディダス ST STトートバッグ ウィメンズ レディース S06361,adidas アディダス adidas StellaSport ブラ レディース S21198,adidas アディダス ST TR七分丈サルエルパンツ M メンズ S05941,adidas アディダス ST 和柄シャツ地ステテコ風パンツ メンズ メンズ A97630.adidas アディダス KID AB ウインドブレーカー パンツ キッズ S06127,adidas アディダス STAR WARS オリジナルス Tシャツ SW DARTH VADER TEE キッズ S14436,adidas アディダス エース 15.4 TF ジュニア ベルクロ 人工芝用サッカートレーニングシューズ キッズ S31600,adidas アディダス ガールズ 24/7 ジャージジャケット マシュマロ キッズ A97249.adidas アディダス HM ストリートミックススウェット3/4丈[カプリ]パンツ レディース AH7248,adidas アディダス W adidasbloom ジャガードパンツ レディース S03642,adidas アディダス プレミアムスポーツ premiumsports アイコニックハーフパンツ メンズ S03386,adidas アディダス SC タッサーロングパンツ メンズ メンズ S06086.adidas アディダス W ActiveGym スカートツキ ジャズパンツ レディース M39514,adidas アディダス CLX パイルジップパーカー メンズ AA0490,adidas アディダス キッズ TCOS SPORTS 強パン カラーブロッグロングパンツ キッズ AH8137,adidas アディダス レディース Seasonal Training climaheat 長袖アンダーシャツ クライマヒート レディース AC2305.adidas アディダス オリジナルス アドリアPS ADRIAPSW レディース M19546,adidas アディダス オリジナルス ハーフパンツ AOP SWEAT SHORT メンズ S27489,adidas アディダス 内田篤人選手着用モデル メンズ adidas24/7 ウォームアップ フーディー ジャケット(デニム風ジャージ) メンズ S92680,adidas アディダス SC ウラトリコットキモウウィンドパンツ レディース AH7318.
adidas アディダス オリジナルス トラックトップジャージ 3FOIL SST TT AO メンズ S18617 2017-08-16

adidas アディダス Condivo14 トレーニングユニフォーム 半袖 メンズ D83101 AB2737 SPORTS オリジナルス

adidas アディダス クレイジートレイン ブースト FF レディース メンズ B26636,adidas アディダス M STANDARD19 スウェット クルー メンズ AC2807,adidas アディダス オリジナルス パンツ LOW CROTCH SWEATPANTS メンズ AB7820,adidas アディダス オリジナルス トラックトップ STR GRAPH TRACK TOP メンズ AB8041. adidas アディダス ナイトロチャージ 1.0 ナイト FG ブラックパック 天然芝グラウンド用サッカースパイク メンズ B26491,adidas アディダス aSMC ジムバッグL レディース S00159,adidas アディダス A UV COOL ネックガードG レディース M39915,adidas アディダス 3ストライプ ゲームソックス 靴下 レディース メンズ W44410.adidas アディダス ESS パックTシャツ メンズ AA5950,adidas アディダス SMR RN POLY ゲームタイム半袖Tシャツ ロサンゼルスレイカーズ メンズ S91409,adidas アディダス キッズ TCOS 総柄 Tシャツ キッズ AB3058,adidas アディダス W Essentials ボーダーSS Tシャツ レディース M66537.adidas アディダス 6P 3ストライプ コットン キャップ 帽子 レディース メンズ AB0537,adidas アディダス CLIMALITE 5P キャップ 帽子 レディース メンズ S20519,adidas アディダス メンズ SQ ランニング 半袖Tシャツ メンズ S03011,adidas アディダス キッズ アクワ 9 K キッズ B26060.adidas アディダス ボーイズ バリケード ショーツ キッズ AA6407 P5,adidas アディダス スーパーサラ 14 J フットサルシューズ ジュニア用 メンズ M19974,adidas アディダス SC ベロアジャケット ウィメンズ レディース S05797,adidas アディダス レスポンス ショーツ メンズ M61759 P5.adidas アディダス F10 HG J ハードグラウンド用サッカースパイク キッズ用 キッズ B41016,adidas アディダス エスノバ ブラトップ Q3 レディース AA6216,adidas アディダス エナメル ショルダーS レディース メンズ S92823,adidas アディダス ベビー クルースーツ キッズ AB7001.adidas アディダス COOL365 ポロシャツ メンズ S18252,adidas アディダス VALCLEAN[バルクリーン] メンズ F98490,adidas アディダス メンズ CEL ウィンドブレーカージャケット メンズ S08106,adidas アディダス オリジナルス Tシャツ ZEBRA LOGO TEE Zebra Print Apparel Capsule レディース AO3007.
adidas アディダス 遠征 エンセイ ボストンバッグ レディース メンズ A96103 2017-08-16

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

にょきにょきブログ

adidas アディダス Condivo14 トレーニングユニフォーム 半袖 メンズ D83101 AB2737 SPORTS オリジナルスアウトレット割引

adidas アディダス StellaSport グラフィック スウェットプルオーバー レディース AA4333 適切な 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 が返される。これは適切な adidas アディダス 日本代表 TIRO15 クロス1/2パンツ メンズ S45664API では無い。引数を見て何を渡せば良いのかが明らかであること。それが適切な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 メソッドや、より安全に adidas アディダス メンズ ESS FAB5 TOKYO クルースウェット トップ メンズ AB3400apache commons 等の StringUtil を使用して比較すること。

スターをつけました

引用をストックしました

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

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

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

読者です 読者をやめる 読者になる 読者になる
{yahoojp} {aoking.hatenablog.jp} zt02-myp12-gui-zd-3398