[英]Spring @Autowired not working with final method on abstract super class
[英]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.