gpt4 book ai didi

java - 什么是更好的方法?沮丧?界面?抽象类?

转载 作者:行者123 更新时间:2023-11-29 08:55:09 28 4
gpt4 key购买 nike

全部,

我一定是做错了。当时这似乎是个好主意,但随着我深入研究,我认为有一种更合适的编程方式来实现它。所以我问你...

一张纸条。我正在使用 Google AppEngine 和数据存储来存储此信息。

好吧...假设我有一个父类(super class)车辆,然后有 3 个子类...汽车、卡车、摩托车。

在 super 类中,有 3 个属性...制造商、型号、类型

例如,这些可能是:

  • 制造商:福特
  • 模特:焦点
  • 类型:汽车

所以在数据存储中,我有许多具有这些属性的车辆实体。因此,如果用户想查看所有汽车...我会使用“汽车”类型拉动所有内容。

如果用户随后想要将这些车辆中的一个添加到“Collection 夹”列表中,我会根据其类型将车辆对象转换为其特定的子类。然后添加该特定子类的额外属性。

这个新的子实体及其添加的属性存储在数据存储区中。

所以基本上,我正在向下转换,例如,从 Vehicle 到 Car。我通过在 Car 类中创建一个额外的构造函数来完成此操作,该构造函数将 Vehicle 作为参数。创建后,Car 对象现在已设置所有属性(制造商、型号、类型),以及其特定实现附带的所有新属性。

这看起来很复杂而且是错误的。它有效,但必须有更好的方法来做到这一点。

我选择这种方式的主要原因是 GAE 数据存储的工作方式。存储父类(super class)及其有限属性并查询它们“更便宜”。说来话长。

我正在尝试为此使用接口(interface)和/或抽象类,但我想获得您的所有意见。

感谢您的帮助。

最佳答案

我认为您不需要在这里使用父类(super class)/子类结构。您所描述的问题是您将对象从一种类型“更改”为另一种类型,并且您无法更改 Java 对象的类型。您可以创建一个新对象,但随后您必须将所有信息从一个对象移动到另一个对象,维护就成了一个问题。

我建议你有一个代表你的车辆的类,它包含对特定类型信息的引用;代表每个特定类型的类都可以扩展某些东西,并且可能应该这样,以便车辆中尝试使用该类型做某事的方法可以调用通用方法来执行它,而不管类型如何。但这样一来,一旦您决定了具体类型,就可以将其添加到现有的车辆对象中,而不用“更改”它。

您还可以探索枚举类型是否可以满足您对特定类型数据的目的——枚举类型可以采用构造函数、具有额外的方法等——关于枚举的 Oracle/Java 教程很好地涵盖了这一点。

关于java - 什么是更好的方法?沮丧?界面?抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20667068/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com