0

ジェネリックにアップグレードしたいレガシーコードがいくつかあります。

    /**
     * Places in this World
     */
  public Map places;

    /**
     * Players watching this World
     */ 
  public Collection players;

    /**
     * A reference to the Adventure using this World
     */
  public Adventure owner;

    /**
     * Create a World.  `a' is a reference to the Frame itself.
     * This reference is used when loading images and sounds.
     *
     * @param a An instance of adventure.
     */
  public World( Adventure a ) {
    places = new HashMap();
    players = new LinkedList();
    owner = a; 
  }

placesIDEは、変数をパラメーター化していないことを警告しているplayersので、このコードにジェネリックスを追加する必要がありますが、どうすればよいですか?<>またはを`places´オブジェクトに追加する<Place>と、ジェネリックではないと表示されるので、間違っていることがわかります。コードのこの部分をジェネリックスを使用するように最新化する方法を教えてください。

ありがとう

4

3 に答える 3

4

に関してはplaces...

まず、型を に追加しますplaces。各値が でありPlace、各キーが であると仮定しStringます。

public Map<String, Place> places;

(キー用と値用の 2 つのタイプが必要です。)

次に、コンストラクターで同じことを行います。

そのようです:

public World(Adventure a) {
    places = new HashMap<String, Place>();
    ...
}

他のフィールドはより単純です。必要な型は 1 つだけであり、これが古い古いコードである場合LinkedList(そのコードの一部である) は必要ありません。CollectionAdventure

于 2012-06-07T07:13:02.283 に答える
2

<>オブジェクトにor<Place>を追加すると、placesジェネリックではないと表示されます

正確なコードも正確なエラーメッセージも表示されないため、推測することしかできません...おそらく後で追加したかplaces(構文的に正しくありません)、または単一のジェネリック型パラメーターのみを追加しましたMap(2つが必要です: キーと値)?

正しい方法は

public Map<KeyType, Place> places;

whereKeyTypeは、使用するキーのタイプを表します。この宣言を変更したら、マップ タイプへの他のすべての参照も更新する必要があります。

places = new HashMap<KeyType, Place>();
...
public Map<KeyType, Place> getPlaces() ...

また、場合によっては、セッターなどへの外部呼び出しも可能です (存在する場合)。

于 2012-06-07T07:09:03.893 に答える
1

Map と Collection に入れたいオブジェクトのタイプを追加する必要があると思います:

public Map<PlaceClass> places;

public Collection<PlayerClass> players;

public World( Adventure a ) {
    places = new HashMap<PlaceClass>();
    players = new LinkedList<PlayerClass>();
    owner = a; 
}

PlaceClass と PlayerClass は、Player オブジェクトと Place オブジェクトのクラス名です。

于 2012-06-07T07:10:35.877 に答える