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

2024-02-16

我对 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(使用前将#替换为@)

这是使用 java 关键字“interface”的正确位置吗? 的相关文章

随机推荐

  • 在 info.plist 文件中设置 SceneDelegate

    我有一个应用程序目标和一些静态库 由于某些原因 我将 SceneDelegate 从应用程序目标移至静态库之一 在info plist文件中 SceneDelegate设置为 PRODUCT MODULE NAME SceneDelegat
  • Android Studio StackOverFlowError:null

    今天更新到 2 3 版本后 我的 Android Studio 停止工作了 null java lang StackOverflowError at java lang ClassLoader defineClass1 Native Met
  • 执行 WebAPI 2 JSON Post 时未找到 HttpRequestBase.GetBufferedInputStream

    使用 Visual Studio 创建 MVC5 WebAPI2 项目 创建了一个基本的 JSON POST 发布参数导致 HttpRequestBase GetBufferedInputStream 未找到失败 适用于 带有视觉工作室的W
  • Spark 文件流获取文件名

    我需要知道从输入目录流式传输的输入文件的文件名 下面是scala编程中的spark FileStreaming代码 object FileStreamExample def main args Array String Unit val s
  • wcf REST 服务和 JQuery Ajax Post:不允许方法

    有人知道这是怎么回事吗 我无法从 WCF Rest 服务获取 json 响应 Jquery ajax type POST url http localhost 8090 UserService ValidateUser data usern
  • 无法从 Spring Cloud Config Server 获取值到我的 Config-Client(limits-service)

    经过几天的互联网搜索和多次尝试 对我来说没有任何结果 我在这里写下 我有项目 弹簧云配置服务器其中包含以下文件 可以从以下位置访问完整项目https github com AshishBharadwaj94 spring cloud con
  • 线程的垃圾收集

    我需要保护吗Thread来自垃圾收集器的对象 那么包含线程运行的函数的对象呢 考虑这个简单的服务器 class Server readonly TcpClient client public Server TcpClient client
  • Node.js Express socket.io 端口 3000 正在使用

    我一直在关注这个 http socket io get started chat http socket io get started chat 有关如何使用 socket io 制作简单聊天应用程序的教程 然而 我尝试使用 Express
  • Xcode 构建时错误:“无法加载文件列表的内容:‘.../Info.plist’(在目标‘xxxx’中)

    Xcode 今天开始在项目中抛出此错误 我无法弄清楚它的含义以及如何对其进行故障排除 并且它不会出现在任何搜索中 它在尝试构建到设备后立即发生 没有编译脚本等 错误 无法加载文件列表的内容 Users Products Debug appl
  • 如何将字符串长度转换为像素单位?

    我有一个像这样的字符串 string s This is my string 我正在创建 Telerik 报告 我需要定义一个textbox这就是我的绳子的宽度 但是 大小属性需要设置为单位 像素 点 英寸等 如何将字符串长度转换为像素 以
  • C++ 中整数的幂[重复]

    这个问题在这里已经有答案了 我需要得到结果pow a b 作为整数 a 和 b 也是整数 目前 计算中 int pow double a double b 包含错误 一个函数可以是什么 它可以对整数执行 pow a b 并返回一个整数 但奇
  • 我可以在 C# 中将 json 反序列化为匿名类型吗?

    我从数据库中读取了一个很长的json 我只想要该 json 的一个属性 我有两个选择 A 为该 json 创建一个接口并反序列化到该接口 这是否有点矫枉过正 因为我只需要一个属性 b 找到我需要的子字符串 正则表达式 哪一个是首选 更新 我
  • 在 C++0x 中传递/移动构造函数的参数

    如果我有一个带有 n 个参数的构造函数 那么该构造函数的任何参数都可以是右值和左值 是否可以通过右值的移动语义来支持这一点 而无需为每个可能的右值 左值组合编写 2 n 构造函数 你可以按值来获取每一项 如下所示 struct foo fo
  • 如何在 Jenkins 中手动安装插件

    从更新中心安装插件会导致 检查互联网连接 无法连接到http www google com http www google com 也许您需要配置 HTTP 代理 部署插件失败 详细信息 hudson util IOException2 无
  • 使用 HtmlService HtmlTemplate 时设置 Google Apps 脚本 showModalDialog 的高度

    我目前正在将使用已弃用的 UI 服务的 Google Apps 脚本更改为 HtmlService 我使用以下代码创建了一个模式对话 在电子表格容器绑定脚本中 var htmlTemplate HtmlService createTempl
  • Angular 导出 Excel 客户端

    我正在使用 Angular v4 我想如何从组件中的对象开始构建 Excel 电子表格 我需要点击按钮下载 Excel 文件 并且我必须在客户端执行此操作 我有一个由数组组成的 json 文件 我需要将其传输到 Excel 文件上 可能可以
  • Strapi v4:填充时没有关系字段

    我正在尝试使用关系名称填充特定关系 categories 与 populate 参数结合使用 但它不会填充categories 当我查看架构时 我发现关系字段存在于属性对象中 但我的回复中仍然只得到非关系字段 我尝试了上面提到的所有组合St
  • 无需 Google 对话框的语音识别

    我将尝试使用带有 RecognitionListener 的语音识别 无需 Google 对话框 但不起作用 启动应用程序时只会发出蜂鸣声 我已将音频记录和互联网权限添加到清单文件中 我希望你告诉我并帮助我找到错误 我在 Log cat 上
  • 加水动画

    我正在尝试获取擦除动画以使圆圈看起来像它充满了水 我遇到了两个错误 甚至无法解决第三个错误 填错了方式 填充后重置为空 黑色 目前 我正在使用 img 标签 但我想将此效果移至body background image 并需要一些关于如何做
  • 这是使用 java 关键字“interface”的正确位置吗?

    我对 Java 相当陌生 在阅读了一些有关路径查找的信息后 我读到了有关使用空类作为 interface 对于未知的对象类型 我正在用 Java 开发一个基于医院主题的游戏 至此 用户可以搭建一个接待台和一个全科医生办公室 它们是两种不同类