簡體   English   中英

如何在運行中從類定義中刪除方法?

[英]How can I remove a method from the class definition on the fly?

首先讓我說這純粹是一種滿足我好奇心的練習。 這並不意味着在任何類型的生產環境中使用。

我想知道的是,通過刪除/添加方法到其定義,是否可以通過任何方式重新定義類。

例如,給定此類:

public class PersonBuilder {

    private String name;
    private int age;

    public PersonBuilder name(String name) {
        this.name = name;
        System.out.println("Name defined");
        return this;
    }

    public PersonBuilder age(int age) {
        this.age = age;
        System.out.println("Age defined");
        return this;
    }

}

我想要的是在調用后從類定義中完全刪除name 如果我調用age則期望等效行為。 基本上,無論調用哪種方法都會被刪除。

我知道這需要一定程度的字節碼操作,我相當肯定它不能通過反射來實現。

無論如何,我正在尋找關於如何發展這種行為的一些指導。 任何提示都會非常有幫助。

問題是即使你找到了一種方法來做你想要的(當然可能)調用那些方法的代碼已經編譯完成了。 這意味着只有當第二次調用方法時,實際結果才會是NoMethodDefFound異常。

所以我的解決方案是為方法創建計數器,並在每次調用此方法時檢查它。 第二次打電話時拋出異常。

當然,這不適用於反思。

也許你可以使用一些在調用方法時拋出異常的包裝器或代理。

或Method.setAccessible(false);

暫無
暫無

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

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