gpt4 book ai didi

java - 是否可以在 Java 中阻止/拒绝转换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:04:08 24 4
gpt4 key购买 nike

我有一个简单游戏的代码,其中必须实现 AgentInterface 才能为游戏中的其中一个角色创建代理 Controller 。 GameState 是一个实现 GameStateInterface 的类,实现这个接口(interface)的对象可以传递给代理,这样代理就可以从游戏状态中读取和分析数据,并且代理必须返回适当的 Action (以 int 形式返回)角色应该接受。

这是代理必须实现的 AgentInterface:

public interface AgentInterface {
// the return value specifies the direction of the joystick
public int action(GameStateInterface gs);
}

使用名为 MyAgent 的代理运行游戏:

    GameState gs = new GameState();
AgentInterface agent = new MyAgent();
while (true) {
// more code here
int bestAction = agent.action(gs)
// more code here
}

但是,在 GameState 中有一些信息是代理不应该能够访问的,因为这会欺骗 Controller 。但是,进行从 GameStateInterface 到 GameState 的转换将允许代理访问 GameStateInterface 中未定义的信息,如下所示:

public MyAgent implements AgentInterface {
public int action(GameStateInterface gs) {
int nLives = ((GameState) gs).nLivesRemaining; // IS IT POSSIBLE TO DENY/PREVENT THIS CAST??
// Do more stuff here
return BestAction;
}
}

我的问题是,是否可以阻止强制转换?我知道多态性是 Java 和面向对象编程语言的主要特征之一,但在这种情况下,我想避免强制转换。

我知道这可以通过许多其他方式解决,但我很想知道是否可以这样做。

提前致谢。

最佳答案

据我所知,不可能拦截类型转换并拒绝它(例如,通过抛出 ClassCastException)。

但与其尝试拒绝类型大小写,不如简单地使用 Proxy pattern控制对实际 GameState 对象的访问。只需实现一个代理类,它只实现 GameStateInterface 并让它将所有方法调用转发给 GameState 对象。现在,不是将实际的 GameState 对象引用传递给操作方法,而是将其传递给代理类的实例。

关于java - 是否可以在 Java 中阻止/拒绝转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1863479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com