簡體   English   中英

如何在java中動態擴展一個類?

[英]How to dynamically extend a class in java?

我正在嘗試基於我傳遞給其構造函數的參數的本機類型動態擴展對象。
我已經閱讀了一些java泛型和通配符,但我似乎無法找到一個好的方法。

偽代碼解釋:

public class myClass extends <?> {
    // Constructor
    public myClass(<?> param) {
    }
}

我是否必須使用某種類型的構建器類? 如果是這樣,我該怎么說呢?

編輯:
我有一種感覺,我的方法非常糟糕,因此我在這里問。 進一步解釋:

我有一個帶有許多子接口的接口,其中一些子接口也有子接口。 出於我的目的,我無法編輯超級界面來添加方法,因為它是一個API。 我有一個事件,它傳遞給我一個子接口,我希望能夠轉換為我自己的對象,它有更多的方法和屬性,但我仍然想要訪問子接口的方法。

例如,子接口稱為實體。 我可以做myClass extendedEntity = new myClass(entity) ,它有我想要公開的新方法。 如果我將傳遞的子接口作為對象的屬性,我可以使用extendedEntity.entity.originalMethod()來訪問子接口中包含的方法。 但我希望將它作為extendedEntity.originalMethod()以及extendedEntity.addedMethod()

這是否對任何人都有意義,是否有一些我能做的事情,我錯過了? (作為一名機械工程師,java是一種愛好,請原諒我!)

泛型不是為了擴展課程。 用於指定類處理給定的類(或類集)。 例如, List<String>是一個存儲String而不是ObjectList

並且泛型僅在編譯時使用。 即使您要求的內容得到支持,在運行時它也會以此結束

  public class myClass extends Object {
    public myClass(Object param) {
    }
  }

為什么不調查委托模式,而不是擔心泛型? 您的extendedEntity可以實現Entity ,將傳入的entity存儲在私有字段中,並將所有Entity方法調用委托給它。 它可以在自己的界面上擁有您想要的任何額外方法。

我不確定你是否完全理解鑄造是如何工作的。 它並沒有神奇地將一個物體變成另一個物體。 演員A a = (A) b僅在b 已經A類型(或子類型)時才有效。

在運行時編譯代碼似乎是合理的解決這個問題。 也曾經有一次我聽過BCEL ,你也可以看一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM