这一行给了我未经检查的投射警告
this.gameSocket = (U) game.getGameSocket();
SocketHandler.java:
public class SocketHandler<T extends Game, U extends GameSocket> extends
Listener
{
protected T game;
protected U gameSocket;
public SocketHandler(T game)
{
this.game = game;
this.gameSocket = (U) game.getGameSocket();
}
}
Game.java:
public class Game<T extends GameSocket>
{
protected T gameSocket;
public T getGameSocket()
{
return gameSocket;
}
public Game()
{
}
}
GameSocket.java:
public class GameSocket<T extends Game>
{
protected T game;
protected int port;
public GameSocket(T game, int port)
{
this.game = game;
this.port = port;
}
}
我觉得这里有一个通用的流通问题,但代码工作正常。但是,可能有更好的方式来做我在这里做的事情。
答案 0 :(得分:1)
你有一个通用的循环:GameSocket的泛型类型扩展了Game,但是通用类型的Game扩展了GameSocket!
要解决此问题,我建议将GameSocket
的类声明更改为:
public class GameSocket<T> {
...
}
然后,您可以将Game
的班级声明更改为:
public class Game<T extends GameSocket<T>> {
...
}
最后,您可以将SocketHandler
的班级声明更改为:
public class SocketHandler<T extends Game<U>, U extends GameSocket<U>> extends Listener {
...
}
这使得一切都是类型安全的,并且警告已经消失。
您甚至可以在检索(U)
game.getGameSocket()