11

java.util.LinkedHashMapを拡張し、Stringをキーとして、Stringを値として受け取り、このマップに初期値を事前入力する引数なしのコンストラクターを持つカスタムクラスを作成する必要があります。

私は最初のタスクで立ち往生しています-ジェネリック引数の代わりにそれだけを受け入れるような方法でLinkedHashMapを拡張する方法は?

私はこれを試しました(動作していません)

import java.util.LinkedHashMap;

@SuppressWarnings("serial")
public class MyMenu<String, String> extends LinkedHashMap<String, String> {


    public MyMenu(){
        this.put("index.jsp", "Home Page");
    }
}
4

6 に答える 6

18

あなたに必要なのは:

import java.util.LinkedHashMap;

@SuppressWarnings("serial")
public class MyMenu extends LinkedHashMap<String, String> {

    public MyMenu(){
        this.put("index.jsp", "Home Page");
    }
}

<String, String>クラス名から削除すると、機能します。あなたは拡張しているクラスを作成しているLinkedHashMap<String, String>ので、あなたのクラスはすでにキーと値としてMap取るaです。独自のジェネリッククラスを作成する場合は、次のようにする必要があります。StringString

たとえば、次のクラスを作成します。

public class MyMenu<K, V> { ... }

次に、そのクラスを拡張します。

public class SomeMyMenu extends MyMenu<String, String> { ... }

その場合、クラスでSomeMyMenuキーと値をとして使用するには、クラスのキーと値を指定する必要がありますString。ジェネリックスについて詳しくは、こちらをご覧ください。

しかし、必要なことを行うためのより効率的な方法は、最終クラスを作成し、その中でマップを次のように宣言することです。

public static final LinkedHashMap<String, String> MAP = new LinkedHashMap<String, String>() {{
    put("index.jsp", "Home Page");
}};

マップから値を取得するには、次を使用します。

SomeClass.MAP.get("Some Key");
于 2012-11-05T15:51:23.060 に答える
3

あなたが説明するように、あなたの闘争が宣言だけである場合、私は次のようなことを試みます:

class MyCustomizedMap extends LinkedHashMap<String, String> {
    //...
}
于 2012-11-05T15:46:44.450 に答える
2

あなたは以下のようなことをすることができます:

   public class MyMap extends LinkedHashMap<String,String>{
于 2012-11-05T15:48:27.413 に答える
1

試す:

public class MyMap extends LinkedHashMap<String, String> { ... }
于 2012-11-05T15:47:26.130 に答える
1

JDK 1.5以降を使用している限り、ジェネリックスを使用して、文字列キーと文字列値を格納するLinkedHashMapを作成し、次のように初期化できます。

LinkedHashMap<String, String> myMap = new LinkedHashMap<String, String>()
{
    {
        put("abc", "xyz");
        ...
    };
}
于 2012-11-05T15:49:42.583 に答える
1

あなたの場合、コンポジションは継承よりも優れたソリューションです。

class MyProperties implements Map<String, String> {

    private Map<String, String> delegatee = new LinkedHashMap<String, String>();

    // ... delegate your methods to delegatee
}
于 2012-11-05T15:53:15.393 に答える