我有一个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