ライブラリで定義されている、変更できないクラスを拡張しています。
public class Parent
{
public void init(Map properties) { ... }
}
Parentを拡張するクラス'Child'を定義していて、ジェネリックスでJava 6を使用している場合、チェックされていない警告を受け取らずにinitメソッドをオーバーライドする最良の方法は何ですか?
public class Child extends Parent
{
// warning: Map is a raw type. References to generic type Map<K,V> should be parameterized
public void init(Map properties) { }
}
汎用パラメーターを追加すると、次のようになります。
// error: The method init(Map<Object,Object>) of type Child has the same erasure as init(Map) of type Parent but does not override it
public void init(Map<Object,Object>) { ... }
// same error
public void init(Map<? extends Object,? extends Object>) { ... }
// same error
public void init(Map<?,?>) { ... }
このエラーは、特定のタイプ、制限付きワイルドカード、または制限なしワイルドカードのいずれを使用しているかに関係なく発生します。警告なしで、@ SuppressWarnings( "unchecked")を使用せずに、非ジェネリックメソッドをオーバーライドする正しいまたは慣用的な方法はありますか?