Effective Javaを読んでいる①

英語のがクールだと思って英語版を買ったせいで買ってから読む気がしなくてずっと放置していたが読み始めた。

わたしの英語は限りなく怪しいので参考にしないでください。モチベーションを上げるためのメモです。でも何か間違っているところを見つけたら教えてほしいとおもう。

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

 

 

static factory methodがコンストラクタよりクールな点

  1. コンストラクタと違ってクールななまえを付けられる
  2. 作らなくてもいい時はインスタンスを作らない選択肢が出来る(シングルトンみたいに同じのずっと返したり出来る)
  3. サブクラスを返せる。
  4. ジェネリクスを冗長にかかなくてよい?

Service provider frameworkの3つの要素

  1. 実装の対象となるインターフェース?(いわゆるインターフェース?)(service interface)
  2. service provider interfaceの実装を登録するメソッド?(provider registration API
  3. インスタンスを得るためのインターフェース(ファクトリメソッド?)(service access API
  4. サービスのインスタンスを作るためのインターフェース(サービスとは別に?)(service provider interface)

ここいまいちわからん

 

DriverManager.getConnectionが例になってるが

引数にmysqlURIを指定したらMySQLのコネクションが帰ってくるしSQLiteだったらSQLiteのコネクションがかえってくるし?みたいなことなのか

そうするとprovider registration APIを呼び出してるのは誰なんだ?

JDBCドライバをクラスパスに入れるとイニシャライザかなんかが呼び出す?

Class.forNameとかがアレしてるのかな・・・?

返すインスタンスの判定に文字列を使うのってあんまりいけてる感じしないんだけどどうなんだろ?Enumだとインターフェースの提供側がサービス増えるごとにEnumいじんなきゃいけない?から無茶だし?

 

JDBCドライバをのソースをみてみる

適当にぐぐったSQLiteJDBCドライバのソースでてきた

xerial / sqlite-jdbc / source / src / main / java / org / sqlite / JDBC.java — Bitbucket

staticイニシャライザでDriverManager.registerDriverを読んでた

Class.forNameでクラスをロードすると登録される感じ

Class.forNameってあんまり意味わかってなかったけどようするにクラスをロードすればいいわけでライブラリのクラスをnewしたりでもいいってこと?

 

Adaptor Patternってなんだ

 昔買ったまま全然読んでない(英語が難しいから)本を読んでみる

Head First Design Patterns

Head First Design Patterns

 

 インターフェースAの実装をインターフェースBの実装でラップしてインターフェースAの実装をインターフェースBとして使えるみたいなやつだった。

 

あかんたれな感じがする。

 

ジェネリクスを冗長に書かなくてよいってのはJava7でダイヤモンド演算子使えるようになったからもうあんまりあれなのかな。

 

static factory methodの弱点

  1. public・protectedなコンストラクタが無いクラス(static factory methodのみ提供)のサブクラスを作れない
  2. 他のstaticなメソッドと区別しづらい 

 

ちょいちょいでてくる( Item 4)とかがなんなのかわかんねえ・・・

➩この本の中でのここを参照せよ!みたいなマークだった

 

Google日本語入力を入れてからやじるしで変換すると大量の謎やじるしが出てきてこまるようになった。