gpt4 book ai didi

java - 在运行时更改对象类型

转载 作者:行者123 更新时间:2023-12-04 21:27:37 26 4
gpt4 key购买 nike

我有以下场景:

class Parent {}

class Child1 extends Parent {}

class Child2 extends Parent {}

interface ExternalSystem {
Parent materialize(Parent a)
}

class Child1System implements ExternalSystem {
Parent materialize(Parent a) {
// specialize a and convert it into Child1
}
}

class Child2System implements ExternalSystem {
Parent materialize(Parent a) {
// specialize a and convert it into Child2
}
}

我想让用户创建类型为 Parent 的对象。系统的某些组件可以使用 Parent 提供的信息。但在某些时候,我想在外部系统中具体化这些对象,并且根据我调用的 ExternalSystem 实现,Parent 对象现在应该是专用对象。

有没有办法创建一个新的子对象并替换父对象占用的空间?

我不能只用 Child1Child1 类型的新对象替换 Parent a 对象,因为 a 可以在其他地方引用。所以,本质上,我想要的是所有引用继续查看 Parent a 但不是 aParent 类型,它现在是子类型。

或者,是否可以进行不同的设计?

最佳答案

没有 placement new Java中的功能。根据托管堆的定义。

您唯一可以做的就是创建实现 ExternalSystem 的代理对象。该代理会将调用分派(dispatch)给 child1 或 child2 的实例。

关于java - 在运行时更改对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6079366/

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