ジェネリクス使ったメソッドのオーバーライド
Mapの仕様では、get時に対応する値が存在しない場合はnullを返すことになっている。しかし、valueがStringなMapの時、「nullは勘弁。空文字列で返してくれると嬉しい」なんて思う時もありますよね。そこで、こんな事をしてみようと思った。
Map<String, String> foo = new HashMap<String, String>() { @Override public String get(String key) { String result = super.get(key); return result == null ? "" : result; } }; Bar.baz(foo);
が、overrideなのにしぐねちゃが違うって言われちゃいます。HashMapの実装を見てみるとこんな感じ。
public class HashMap<K,V> ... implements Map<K,V> ... { ... public V get(Object key) { ... } ... }
んー、どんなシグネチャにすればoverrideできるんだろう。
- public String get(String key) → しぐねちゃが違う
- public String get(Object key) →
同様成功! - public Object get(Object key) → しぐねちゃが違う
- public V get(Object key) → Vって何?って言われる。
無名クラスじゃ無理ぃ?orz
追記
コメント頂きまして、うまくいきましたー。なんでさっきはダメだったんだろうorz あとは↓の問題だなぁ〜。