我有一个应用程序,用户可以在其中玩多种类型的游戏。每个游戏都扩展了Game
类,其中包含与游戏相关的各种内容。每个游戏还有一个关联的用户类,其中包含User
(包含电子邮件,用户名等),例如ChessUser
和ScrabbleUser
,其中包含有关游戏的统计信息和其他用户信息。
在每个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;
}
答案 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
}