1

String のみをキーと値として取る java.util.Map の実装を作成したいと考えています。

私はいくつかのことを試しました

abstract class BaseMap<String,String> implements Map<K,V>

インターフェイスを実装していて、キーと値の完全な定義を満たしていないため、これによりコンパイルエラーmebeが発生します

次に、インターフェイスを拡張して型を定義しようとしましたが、それもできません

public interface IBaseMap<String, String> extends Map<K, V>

それでも「型パラメーター文字列が java.lang.String を隠しています」というエラーが表示されます

助けてください、事前に感謝します

4

2 に答える 2

9

次のようなジェネリックのインターフェイスを拡張しながら、具象型を提供する必要があります。

abstract class StringToStringMap implements Map<String, String> {
   // ...
}

Map<K, v>または、インターフェースを拡張する場合は、次のようにします。

interface IBaseMap extends Map<String, String> {
   // ...       
}
于 2013-09-11T16:48:37.237 に答える
1

ここで本当に継承が必要ですか?このような使い方は絶対に避けたほうがいいです。より良い方法でコンポジションを操作できます。

class CustomMap<K extends String, V extends String> {
    private Map<K, V> map;

    public Map<K, V> getMap() {
        return map;
    }
}

CustomMapこれで、 with を型引数としてのみインスタンス化できます。Stringこれは、最終的に囲まれた のキーと値として使用されますMap


実際、コメントで @TedHopp によって指定されているように、クラスをジェネリックにする必要はまったくありません。を囲むだけMap<String, String>です:

class CustomMap {
    private Map<String, String> map;
}
于 2013-09-11T16:49:22.780 に答える