簡體   English   中英

棄用最終的超類方法?

[英]Deprecate final super class method?

您如何指出超類的最終方法的棄用?

//Class a out of my control
class A{
    public final void foo(){
     ...
    }
}

class B extends A{
   public void fooAlternative(){...}

   //deprecate foo?
}

背景 :在擴展JavaFX API時,我們面臨着幾種阻止我們隨意進行更改的最終方法。 有時這是必需的,我找到的唯一合適的解決方案是創建一個額外的方法。 在這種情況下,棄用A提供的方法會使程序員意識到存在不同的替代方案。

包裝對象不是一個可行的選擇,因為多態性需要繼承。

為了讓您更清楚地了解Eugene在評論中所說的內容:

import javafx.scene.control.Label;

/**
 * Example as described by @Eugene
 */
public class AWrapper {

    private final Label wrapped = new Label();

    public AWrapper() {

    }

    // Implement only what you **want** to expose

    // Assume setText as "deprecated"

    /**
     *
     * @param text The text
     * @see Label#setText(String)
     */
    @Deprecated
    private void setText(final String text) {
        wrapped.setText(text);
    }

    /**
     * Alternative to {@link AWrapper#setText(String)}.
     *
     * Does some extra work.
     *
     * @param text New text
     */
    private void text(final String text) {
        System.out.println("New Label text: " + text);

        wrapped.setText(text);
    }

}

您可以進行合成而不是繼承, 只會暴露您需要的任何API(如果您有時間,則可以顯示完整的原始API)。 這基本上可以讓你控制“超級”元素。 無法編輯超級類的元信息,無論如何都不應該編輯它們。

暫無
暫無

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

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