Effective Java 輪読会
2014/02/26
開発部 田中
項目53
リフレクションよりインターフェースを選ぶ
リフレクションのデメリット
• コンパイル時の型検査を活用できない
• 冗長
• パフォーマンスが悪い
想定される使いどころ
• クラスブラウザー
• オブジェクトインスペクター
• コード解析ツール
• インタプリタ的組み込みシステム
クラス名からインスタンスを生成する
Class<?> cl = null;
try {
cl = Class.forName(args[0]);
} ...
Set<String> s = null;
try {
s = (Set<String>) cl.newInstance();
} ...
問題点
• 実行時例外
• 冗長
• 未検査警告
o cl.newInstance()の結果の要素がStringであることを
確認できない
o newInstance()の戻り値型はSet<?>..?
リフレクションは多くの短所を持つ
• 他に上手く実装する方法を考える
• リフレクションを活かせるパターンを把握
しておく(たい)
• JDBC
• FieldConstraint
項目54
ネイティブメソッドを注意して使用する
本当に必要か?
• パフォーマンス改善のためのネイティブメ
ソッドは今となっては必要ない
項目55
注意して最適化する
速いプログラムよりも良いプログラム
• パフォーマンス < 設計
• パフォーマンスを制限しないAPIを意識する
o ex. 防御的コピーが必要なメソッド
• モジュール化していれば、最適化も容易
• 安易にパフォーマンスを改善しようとして
も、実際に改善されるか分からない
o パフォーマンス測定を必ず実施
項目56
一般的に受け入れられている命名規約を守る
活字的命名規約
• パッケージ
• クラス
• インターフェース
• メソッド
• フィールド
• 型変数
文法的命名規約
• メソッド
o is
o has
o get
DataSpider では..
http://wiki/index.php?%B3%AB%C8%AF%C9
%F4%2F%A5%B3%A1%BC%A5%C7%A5%
A3%A5%F3%A5%B0%B5%AC%CC%F3#y0
07df06

Effective Java 輪読会 項目53-56