java动态类型_在Java中动态比较类型

我有一个Screen类,它是几种类型的屏幕的基类,例如PauseScreen,MainScreen等.

我的课堂上有一堆屏幕,我的游戏根据按钮的不同来推动/弹出屏幕.

但是我需要从一个屏幕跳到另一个屏幕(弹出所有内容直到需要的屏幕).

可以说我有一个MainScreen,一个GameScreen和一个PauseScreen.我需要从PauseScreen转到MainScreen,(弹出PauseScreen和GameScreen).

用Java首选的方式是什么?我可以在每个屏幕上存储一个ID,但这似乎不正确.

编辑:这是我想要实现的,我只是想知道有没有一种更好的方法,不需要创建枚举(IIRC可以在运行时获取类的类型,但是也许是不好的练习我想做什么?).

class X

{

Stack< Screen > screens = new Stack< Screen >();

void push( Screen s )

{

screens.push( s );

}

void pop()

{

screens.pop();

}

void popUntil( Screen.Type t )

{

// go through the list in reverse order

while( screens.next().type != t )

screens.pop();

}

}

// other places in the code

app.popUntil( Screen.Type.MainScreen );

app.popUntil( Screen.Type.GameScreen );

解决方法:

您可以使用.class运算符直接引用类,该运算符返回java.lang.Class实例:

class X

{

// ...

void popUntil(Class extends Screen.Type> type)

{

// go through the list in reverse order

while( screens.next().getClass() != type)

{

screens.pop();

}

}

}

x.popUntil(Screen.Type.MainScreen.class);

x.popUntil(Screen.Type.GameScreen.class);

注意,可以使用引用相等(==和!=)而不是对象相等(equals方法)来比较java.lang.Class的实例.但是,此实现仅检查实例的类型是否恰好是给定参数.如果要检查是否扩展或实现它,则可以使用java.lang.Class#isInstance(Object)方法:

while (!type.isInstance(screens.next()))

{

screens.pop();

}

标签:casting,java

来源: https://codeday.me/bug/20191027/1945095.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值