我是 Java 的新手。在阅读了一些关于路径查找的信息之后,我读到了关于使用空类作为“接口(interface)
”,用于未知对象类型。
我正在开发一款基于医院主题的 Java 游戏。至此,用户可以搭建接待台和全科医生办公室。它们是两种不同类型的对象,一种是Building
,一种是ReceptionDesk
。 (在我的类(class)结构中。)
我的类结构是这样的:
GridObject-->Building
GridObject-->Item-->usableItem-->ReceptionDesk.
当可用元素可以旋转而建筑物不能旋转时,问题就来了。鼠标点击事件在网格上,所以调用相同的方法。 GP 的办公室是 Building
,接待处是 ReceptionDesk
。只有 ReceptionDesk
具有方法 rotate
。右键单击网格时,如果处于构建模式,我必须使用此“if”语句:
if (currentBuilding.getClass.equals(ReceptionDesk.getClass)
然后我必须创建一个新的 ReceptionDesk
,使用 rotate
方法,然后把它
前台回到 currentBuilding GridObject
。
我不确定我是否用这个问题很好地解释了自己。对不起。我对 Java 还是很陌生。我会尽力回答任何问题,如果需要,我可以发布更多代码片段。我不知道可能有解决不知道对象类的问题的方法,但是我也可能以错误的方式处理它。
在看到该站点上的回复如此快速和有用之前,我并没有打算研究这个问题! :)
提前致谢。
相对
最佳答案
在您的情况下,您不想在对对象执行某些操作之前检查对象的类。你应该使用 polymorphism .你想让接口(interface)定义一些方法。每个类都实现这些方法。通过接口(interface)引用对象,并让这些对象的各个实现将它们的值返回给调用者。
如果您再描述一些您认为需要的对象,这里的人会对您应该如何布置它们有意见。但是根据您提供的内容,您可能需要一个定义一些通用方法的“Building”接口(interface)。您可能还需要一个“UsableItem”界面或更通用的东西。 Hospital 可以是一个实现构建的类。 ReceptionDesk 可以实现 UsableItem。建筑物内部可以有一个 UsableItem 网格。
如果 rotate() 是所有实际工作的家具的通用方法,您可以考虑创建一个 AbstractUsableItem 类,它是一个实现 UsableItem 的抽象类,并提供 rotate() 方法。如果每个实现类中的 rotate 不同,您将在接口(interface)中拥有该方法,但每个类,如 ReceptionDesk 将使用 rotate() 方法做自己的事情。你的代码会做这样的事情:
UsableItem desk = new ReceptionDesk();
desk.rotate()
在您的示例中,如果您在屏幕上单击鼠标会旋转其下方的对象,并且您确实需要在执行类似操作之前检查对象是否可以旋转,您会这样做
if (clickedObject instanceOf UsableItem) {
((UsableItem) clickedObject).rotate();
}
其中 UsableItem 是接口(interface)或抽象类。有些人认为所有设计都应该通过接口(interface)契约来完成,并建议为每种类型的类提供一个接口(interface),但我不知道您是否必须走那么远。
关于java - 这是使用 java 关键字 "interface"的正确位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/736081/