指定子类中的集合类型

时间:2015-01-07 11:22:11

标签: java

我有一个应用程序,用户可以在其中玩多种类型的游戏。每个游戏都扩展了Game类,其中包含与游戏相关的各种内容。每个游戏还有一个关联的用户类,其中包含User(包含电子邮件,用户名等),例如ChessUserScrabbleUser,其中包含有关游戏的统计信息和其他用户信息。

在每个Game课程中,我需要一个当前正在玩游戏的所有用户的列表。由于所有游戏都需要此列表,我想将其放在User类中,但因为它包含玩游戏的用户类型(ChessGame将包含ChessUsers列表)我不能在没有强制转换值的情况下执行此操作检索时,我宁愿不做。有没有一种方法可以在不转换检索值的情况下执行此操作?

一些示例代码:

public class Game {
  private List<Player> players;

  public Player getPlayer(int index) {
    return players.get(index);
  }
}

public class Player {
  private String username;
  private String email;
}

public class ChessGame extends Game {
  // getPlayer now needs to return a ChessPlayer, hopefully without casting
}

public class ChessPlayer extends Player {
  private int checkmates;
}

2 个答案:

答案 0 :(得分:5)

使用泛型:

public class Game<T extends Player> {

    private List<T> players;

    public T getPlayer(int index) {
        return players.get(index);
    }
}

public class Player {
  private String username;
  private String email;
}

public class ChessPlayer extends Player {

}

public class Chess extends Game<ChessPlayer> {

}

答案 1 :(得分:2)

您可以使用java Generics获得此功能:

public class Game<T extends Player> {
  private List<T> players;

  public T getPlayer(int index) {
    return players.get(index);
  }
}

然后在子类中指定将由getPlayer方法返回的正确类型:

public class ChessGame extends Game<ChessPlayer> {
  // getPlayer now needs to return a ChessPlayer, hopefully without casting
}