今日は濃かった・・・


id:Yoshioriさんの「月曜だしブログで答えちゃおうの巻」
http://d.hatena.ne.jp/Yoshiori/20090629/1246248442

まずジェネリクス
完全に勘違いしていましたが、コレクションの実装を例に教えてもらえて納得しました!
ジェネリクスに関する疑問はもうすっきりました。
今までは「要素の型を指定するもの」と考えてましたが、
実際はただが使いまわされてるだけでした。


モデルとコンポーネントに関しては今日ももやもやしてたんですが、
これもやっとすっきりすることができました。
ずっとコンポーネント自身が値を持っているものと思い込んでしまってて理解に時間がかかりました。
コンポーネントは値を持っていない。HTMLタグを作るだけ。
モデルはコンポーネントと値を紐付けるもの。


思えば・・・
どちらも今までの間違った理解の仕方が原因で苦しみました。
間違った理解を崩すのに時間がかかっていますorz
残り少しの試用期間ですが、まだまだ勉強することはいっぱいだ!
懲りずに悩みまくろう。


mvn eclipse:eclipse -DdownloadSources=true
これをするとメソッドの実装を見れるようになりました。

WicketがHTMLを出力する際のエンコードの設定(?
ブラウザ上でのHTMLの文字化けが直りました。

	@Override
	protected void init() {
		super.init();
		getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
	}


リフレクション
これJava?って感じですw
見たことない不思議なことをやっています。
「変数を変数名の文字列でアクセスするのが気持ち悪い」と伝えたら
Yoshioriさんが説明してくれました。

import java.lang.reflect.Field;

public class Test {
	public static void main(String[] args) throws Exception {

		Class<TestData> clazz = TestData.class;
		Field field = clazz.getDeclaredField("text");
		field.setAccessible(true);

		TestData data = TestData.class.newInstance();

		field.set(data, "hoge");

		System.out.println(data.getText());
	}
}
public class TestData {

	private String text;

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
}

説明を受けて・・・コードの意味というか役割は理解できました・・・
が、こんなんあり!?って感じです。

リフレクションに感じた印象=危険。裏機能。管理者モード。
初心者はもちろん、上級者でも内部の仕様と実装に精通してないと大ポカやらかしそうに思いました。
だって、何らかの意味があってprivateにしてる(と思われる)フィールドを操作したりするのだから。。。


まだまだ僕がこれを知るのは早かったそうです。
でもまた利点についても勉強してみようと思います。