首页 / JAVA / Java中泛型类的泛型类
Java中泛型类的泛型类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中泛型类的泛型类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3067字,纯文字阅读大概需要5分钟。
内容图文
![Java中泛型类的泛型类](/upload/InfoBanner/zyjiaocheng/651/a80f6d1b294b4275b80e548e0b0f1d32.jpg)
我有一个这样的类层次结构设置:
public abstract class GameController
public abstract class Game
我想使用通用的GameController类,因此它需要特定的Game子类,因此我将其更改为:
public abstract class GameController<GameType extends Game>
public abstract class Game
但是后来我也想拥有一个通用游戏来接受特定的玩家子类,因此我将其更改为:
public abstract class GameController<GameType extends Game<PlayerType>, PlayerType extends Player>
public abstract class Game<PlayerType extends Player>
有没有一种更好的方法可以解决这个问题,所以我不必两次声明PlayerType(在GameController子类和Game子类中)?
编辑:
GameController是一个网络类,它接收发布和获取请求,并将它们转换为更接近游戏所需的内容,然后一个子类(例如MyGameController)进一步将发布的byte []转换为特定游戏类的方法调用,说MyGame.代码示例:
GameController:
public abstract class GameController<GameType extends Game<PlayerType>, PlayerType extends Player> {
private Hashtable<String, GameType> games;
public MultiplayerMain() {
super();
games = new Hashtable<String, GameType>();
}
protected abstract GameType createGame(InputStream in, String gameId);
protected abstract PlayerType createPlayer(InputStream in, GameType game, String playerId);
protected abstract byte[] gameAction(InputStream in, GameType game, PlayerType player);
//Other stuff that calls createGame, createPlayer, and gameAction
}
游戏:
public abstract class Game<PlayerType extends Player> {
private Hashtable <String, PlayerType> players = new Hashtable<String, PlayerType>();
public final String gameId;
public Game (String id) {
gameId = id;
}
public abstract byte[] getGameState();
public abstract byte[] getGameState(PlayerType player);
final PlayerType getPlayer(String userId) {
return players.get(userId);
}
final void addPlayer(PlayerType player) {
players.put(player.userId,player);
playerAdded(player);
}
final void removePlayer(PlayerType player) {
players.remove(player);
playerRemoved(player);
}
protected void playerAdded(PlayerType player) {}
protected void playerRemoved(PlayerType player) {}
}
MyGameController:
public class MyGameController extends GameController<MyGame,MyPlaer> {
protected MyGame createGame(InputStream in, String gameId) {
byte[] data = getInitializationData(in);
return new MyGame(gameId,data);
}
protected byte[] gameAction(InputStream in, MyGame game, Player player) {
byte[] data = getData(in);
MyGame.methodSpecificToMyGameClassBasedOnInputStream(data);
return game.getGameState(player);
}
protected Player createPlayer(InputStream in, MyGame game, String playerId) {
byte[] otherData = getOtherData(in,game)
return new MyPlayer(playerId,otherData);
}
}
MyGame:
public class MyGame extends Game<MyPlayer> {
public MyGame(String id) {
//...
}
public byte[] getGameState() {
//...
}
public byte[] getGameState(Player user) {
//...
}
public void methodSpecificToMyGameClassBasedOnInputStream(byte[] data) {
//...
}
}
解决方法:
您是否需要泛型?而是可以将Player注入Game并将Game注入GameController吗?
public class Game {
private final PlayerType playerType;
public Game(PlayerType playerType) {...}
}
public class GameController {
private final Game game;
public GameController(Game game) {...}
}
内容总结
以上是互联网集市为您收集整理的Java中泛型类的泛型类全部内容,希望文章能够帮你解决Java中泛型类的泛型类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。