java - 如何解决此未经检查的强制转换警告?

标签 java generics

这一行给了我未经检查的强制转换警告

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/

相关文章:

java - 如何解决java.lang.OutOfMemoryError

java - 从 JComponent 的右下角动画缩小会导致卡顿

c# - 无法隐式转换类型。存在显式转换(您是否缺少强制转换?)

java - 扫描器如何进行字符串比较?

Java 在一个类中打开文件流并在另一个类中关闭/删除文件

java - SWT 使用 ContentProposalAdapter 显示 HTML

c#在方法的参数中继承一个带有派生类的接口(interface)

c# - 如何获取表单上的所有标签并将具有特定名称模式的标签的 Text 属性设置为 string.empty?

java - Java 中的通用 InternPool<T>?

java - GWT序列化: polymorphism with generics