一千萬個為什麽

搜索

在運行時更改對象類型

我有以下情況:

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 的所有引用,而不是 a 類型 Parent 它現在將是一個孩子類型。

或者,這可以設計不同嗎?

最佳答案

Java中沒有新的展示位置功能。根據托管堆的定義。

您唯一能做的就是創建實現ExternalSystem的代理對象。該代理將調用child1或child2的實例。

轉載註明原文: 在運行時更改對象類型