【问题标题】:How do I pass the same object across multiple classes java?java - 如何跨多个类传递相同的对象?
【发布时间】:2018-06-14 20:32:40
【问题描述】:

我有一个我想跨多个类使用的对象类。基本上,我希望将此对象用作我可以将信息转储到其中然后解压缩该信息的地方。

比如说我有 5 个班级

Class1 将返回一个盒子对象。 --> Foo(object) 将存储盒子

Class2 将返回一个蛇对象。 --> Foo(object) 将存储蛇

Class3 将返回一个圆形对象。 --> Foo(object) 将存储圆。

Class4 将返回一个食物对象。 --> Foo(object) 将存储食物

Class5 将返回一个盒子、蛇、圆圈和食物对象。 --> 解压 Foo(object) 以返回 box、snake、circle 和 food 对象。

我该怎么做?如果可能的话,你能为这种场景提供一些示例代码吗?如果需要进一步说明,请告诉我。

【问题讨论】:

  • 所以你想要一个类来包装你的对象?这已经是Object 类的作用了。
  • 对于这类问题,甚至不需要代码来回答它。我只是需要一些指导。
  • 但是假设您在类 1 中声明了 Foo 对象。如何在类 2 中声明相同的 foo 对象?事实是你不能。那么我该如何存储信息。例如,class class1{ Foo a = new Foo(); a.setbox(); } 类 2 { Foo a = new Foo() a.setSnake();对象 a 有两个实例化。不是每个实例都不同吗?
  • 我们要求您提供代码是有原因的。 SO 并不是让我们为您编写代码。请展示您迄今为止尝试过的内容,然后针对您遇到的具体问题提出具体问题。

标签: java android android-studio


【解决方案1】:

您可以使用dump 方法创建interface,并使用您打算使用的所有类实现interface。如果您的interface 被称为Dumper,您将需要在您打算使用它的所有类中实现它,如果可能的话。如果不是,例如,EvilGuy 类不在您的控制范围内,您可以简单地创建一个 EvilGuyWrapper class,其中包含 EvilGuy 的成员并实现 Dumper

【讨论】:

    【解决方案2】:

    有点像收藏家,对吧?

    创建一个会累积对象的类:

    public class EventCollector {
        private List<Object> events = new ArrayList<>();
        public void add(Object e) {
            events.add(e);
        }
    
    }
    

    将 EventCollector 实例传递给您的盒子、蛇、食物、圆形对象:

    public class Circle {
         private EventCollector ec;
         public setEventCollector(EventCollector ec) {
             this.ec = ec;
         }
    
         public void pack() {
             ec.add(this);
         }
    }
    

    对食物、盒子、蛇等做同样的事情......在所有这些上调用 pack 方法。

    所有对象最后都会在 EventCollectior 中。

    【讨论】:

      【解决方案3】:

      当使用 Java 工作时,请记住该语言非常倾向于在编译时提供可用信息。

      您要做的基本上是在运行时确定这一点,您只能通过返回对象并将其转换为您当时期望的类来做到这一点。

      在你的情况下,你需要有一个你想要存储的所有不同类型的公共超类,一个由所有类型实现的接口,或者只使用 Object.您可以将其存储在任何此类集合中,例如 ArrayList。

      然后,当您取回对象时,您需要使用“instanceof”来找出您正在查看的内容,然后将其转换为适当的类型。

      请注意,这很乏味且容易出错,您可能需要重新考虑和学习泛型。

      【讨论】:

        【解决方案4】:

        你可以做到的:

        1. 创建一个类,您将创建您的对象作为它的实例。
        2. 使这个类从 Serializable 类扩展(允许你冻结和冻结,你反对)
        3. 使用意图在您的活动之间导航并将您的对象添加为意图数据。

        编辑
        这就是活动!
        第二种方式

        如果你让你的对象从 Sharedpreferences 扩展的类中调用它的数据,比如

        从类 A 创建一个对象,其构造函数使用 Sharedpreferences 类填充对象数据

        【讨论】:

          猜你喜欢
          • 2015-05-31
          • 1970-01-01
          • 1970-01-01
          • 2012-10-18
          • 2019-03-08
          • 1970-01-01
          • 1970-01-01
          • 2014-06-04
          • 1970-01-01
          相关资源
          最近更新 更多