Java 在子类中指定集合的类型
我有一个应用程序,用户可以在其中玩多种类型的游戏。每个游戏都扩展了game类,其中包含与游戏相关的各种内容。每个游戏还具有一个关联的用户类,该类扩展了包含电子邮件、用户名等的用户,如ChessUser和ScrabbleUser,其中包含有关游戏的统计信息和其他用户信息 在每个游戏类中,我需要一个当前正在玩游戏的所有用户的列表。由于所有游戏都需要此列表,我希望将其放置在User类中,但由于它包含玩游戏的用户类型,ChessGame将包含一个ChessUsers列表,因此在检索时,如果不进行值转换,我将无法执行此操作,而我不希望执行此操作。有没有一种方法可以在不强制转换检索到的值的情况下执行此操作 一些示例代码:Java 在子类中指定集合的类型,java,Java,我有一个应用程序,用户可以在其中玩多种类型的游戏。每个游戏都扩展了game类,其中包含与游戏相关的各种内容。每个游戏还具有一个关联的用户类,该类扩展了包含电子邮件、用户名等的用户,如ChessUser和ScrabbleUser,其中包含有关游戏的统计信息和其他用户信息 在每个游戏类中,我需要一个当前正在玩游戏的所有用户的列表。由于所有游戏都需要此列表,我希望将其放置在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;
}
使用泛型:
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> {
}
您可以使用java获得此功能:
你要找的是。检查getPlayer。返回类型不是void,而是Player。泛型适合这样的情况吗?我一直认为这一点对于类来说更重要,因为类的整个存在就是提供某些类型的对象。泛型类型是对类的某种细化。在这种情况下,你表明,在国际象棋棋手玩。
public class Game<T extends Player> {
private List<T> players;
public T getPlayer(int index) {
return players.get(index);
}
}
public class ChessGame extends Game<ChessPlayer> {
// getPlayer now needs to return a ChessPlayer, hopefully without casting
}