皆さん、JDK5.0で導入されたGenericsって使ってますか?
特にJavaのコレクション(ListとかMapなど)を使う時、Genericsって使ってますか?
まぁ、ケースxケースなんでしょうけどね。
私的には、Genericsって、あまり好きくない。なぜかって、コードが汚くなるからですよ。
ちょっとコードを例示すると、昔はこうだった。
public class Sample {
protected Map connMap = new HashMap();
public Connection getConnection(String name) {
Connection conn = (Connection)connMap.get(name);
if (conn == null) {
conn = getConnectionSomehow(name);
connMap.put(name, conn);
}
return conn;
}
public Map getConnectionMap() {
return connMap;
}
}
|
Genericsを使うとこんな感じに変身。
public class Sample {
protected Map<String, Connection> connMap = new HashMap<String, Connection>();
public Connection getConnection(String name) {
Connection conn = connMap.get(name); // キャスト不要、それだけ?
if (conn == null) {
conn = getConnectionSomehow(name);
connMap.put(name, conn);
}
return conn;
}
public Map<String, Connection> getConnectionMap() {
return connMap;
}
}
|
別にキャストすれば良いじゃんって思うのは私だけ。それより、なんかコード汚くなるじゃんって思うのは私だけ。
人によっては、たかがキャスト、されどキャストなのかも知れませんが。明示的な型宣言というかコンパイル時の型チェックというかJavaが静的型付けなのでそうすべきと言う理屈はそうなのですが、個人的にはどうも感覚的に好きになれないんです。それに、最近、動的型付け言語が台頭して来てるし。
そもそも、この< >の山括弧が視覚的に受け入れにくいのかなー。プログラムって、()とか{}の括弧とかで見慣れているので。それにそこの型宣言の行だけが長くなってバランス悪いし。
それに、別にコレクションの中の型なんか、明示的にGenericsで宣言しなくても、それを使うコンテキストとメソッド名とかパラム名とかで大概の場合は想像つくじゃん。
でも、まぁ、ケースバイケースなのかな。慣れの問題かなー。んー。
そうか、やっぱ、美的な感覚で好きになれないということなのか。
その感性を大事と思うか理論性を優先させるべきかは人によるけど。
まぁ、どうでもいいか。