这一行给了我未经检查的强制转换警告
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();
}
}
游戏.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;
}
}
我觉得这里好像存在一般的循环问题,但代码工作正常。然而,可能有更好的方法来完成我在这里所做的事情。
最佳答案
您有一个通用循环: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 {
...
}
这使得所有内容都是类型安全的并且警告消失了。
您甚至可以在检索 game.getGameSocket()
时删除显式转换 (U)
关于java - 如何解决此未经检查的强制转换警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43751036/