java - 这是使用 java 关键字 "interface"的正确位置吗?

标签 java interface keyword

我是 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/

相关文章:

java - Gradle 忽略内部关系存储库

java - Spring 添加外部 jar 与 Controller 不工作

c++ - 如何有条件地选择我在 C++ DLL 中通过 COM 调用的 C# 类?

java - 监听(注册)接口(interface)的特定方法而不实现所有方法,Java

java - 添加或修改java语言关键字

java - 什么是嵌套类型?

java - PKCS#11 PKCS11 dll

sql - 数据源和数据集的区别

c# - 什么时候应该在 C# 4.0 中使用动态关键字?

.net - 为什么.Net中存在 'sealed'关键字?