我对 Java 相当陌生。在阅读了一些有关路径查找的信息后,我读到了有关使用空类作为“interface
",对于未知的对象类型。
我正在用 Java 开发一个基于医院主题的游戏。至此,用户可以搭建一个接待台和一个全科医生办公室。它们是两种不同类型的对象,一种是Building
一个是ReceptionDesk
。 (在我的班级结构中。)
我的班级结构是这样的:
GridObject-->Building
GridObject-->Item-->usableItem-->ReceptionDesk.
当可用物品可以旋转而建筑物不能旋转时,问题就出现了。鼠标点击事件在网格上,因此调用相同的方法。全科医生的办公室是Building
接待处是一个ReceptionDesk
。只有ReceptionDesk
有方法rotate
。当右键单击网格时,如果处于构建模式,我必须使用这个“if”语句:
if (currentBuilding.getClass.equals(ReceptionDesk.getClass)
然后我必须创建一个新的ReceptionDesk
, 使用rotate
方法,然后把
接待台回到currentBuilding GridObject
.
我不确定我是否很好地解释了这个问题。对不起。我对 Java 还是很陌生。我会尽力回答任何问题,如果需要,我可以发布更多代码片段。我不知道可能有办法解决不知道对象的类的问题,但是我也可能以错误的方式处理它。
我本来没有打算调查这个问题,直到我看到这个网站上的回复有多快和有帮助! :)
提前致谢。
Rel
在您的情况下,您不想在对对象执行某些操作之前检查该对象的类。你应该使用多态性 http://www.uweb.ucsb.edu/~cdecuir/Polymorphism.html。您想让接口定义一些方法。每个类都实现这些方法。通过对象的接口引用该对象,并让这些对象的各个实现将其值返回给调用者。
如果您再描述一些您认为需要的物品,这里的人们将会对您应该如何布置它们提出意见。但从您提供的内容来看,您可能需要一个定义一些通用方法的“构建”接口。您可能还需要一个“UsableItem”接口或更通用的接口。医院可以是一个实现建筑的类。 ReceptionDesk 可以实现 UsableItem。建筑物内部可以有一个可用项目网格。
如果rotate()是所有实际完成一些工作的家具的通用方法,您可以考虑创建一个AbstractUsableItem类,它是一个实现UsableItem并提供rotate()方法的抽象类。如果每个实现类中的rotate 不同,那么您将在接口中使用该方法,但每个类(例如ReceptionDesk)都会使用rotate() 方法执行自己的操作。你的代码会做类似的事情:
UsableItem desk = new ReceptionDesk();
desk.rotate()
在您的示例中,如果您的鼠标单击屏幕旋转了其下方的对象,并且您确实需要在执行类似操作之前检查该对象是否可以旋转,那么您会这样做
if (clickedObject instanceOf UsableItem) {
((UsableItem) clickedObject).rotate();
}
其中 UsableItem 是接口或抽象类。有些人认为所有设计都应该通过接口契约来完成,并为每种类型的类建议一个接口,但我不知道是否必须走那么远。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)