HashMap
インターフェイスを実装していないため、をにIParams
キャストすることはできません。これはジェネリックとは何の関係もありません。HashMap
IParams
IParams
とHashMap
は、両方が実装または拡張するという意味で「兄弟」Map
です。HashMap
しかし、それはあなたがそれがであるかのように扱うことができるという意味ではありませんIParams
。インターフェイスにメソッドを追加するとしますIParams
。
public interface IParams extends Map<String, String> {
void someMethod();
}
もちろん、にsomeMethod
は存在しませんHashMap
。toをキャストするHashMap
ことIParams
が機能する場合、メソッドを呼び出そうとするとどうなると思いますか?
IParams params = (IParams) new HashMap<String,String>();
// What's supposed to happen here? HashMap doesn't have someMethod.
params.someMethod();
あなたのコメントに関して:
目的は、ジェネリックスを非表示にするインターフェイスを作成し、マップキー文字列定義を保持することです(例には示されていません)。
あなたができることは、実装IParams
と拡張を行うクラスを作成することですHashMap
:
public class Params extends HashMap<String, String> implements IParams {
// ...
}
IParams params = new Params();