[英]Inheritance and static factory methods
我已經為控制台輸出編程了一個java.util.logging.Formatter(名為OneLineFormatter)。 它有兩個靜態工廠方法,都調用私有構造函數。
現在,我想編寫第二個用於調試目的的程序(名為DebugFormatter),它僅覆蓋OneLineFormatter中的formatRecord方法,因此也可以打印跟蹤,而不僅是本地化的消息和類。
Eclipse警告我,超級構造函數OneLineFormatter()未定義,因此我必須調用另一個構造函數。 我用問題搜索了一下,發現了這一點: Java錯誤:對於 StackOverflow上的默認構造函數 , 未定義隱式超級構造函數 。 但是我不想創建一個公共構造函數,因為這將違反工廠原則。 工廠方法和構造函數可以相同(盡管DebugFormatter工廠方法應創建一個新的DebugFormatter而不是OneLineFormatter)。
如果您需要更多信息,請詢問。 謝謝您的幫助!
編碼:
public class OneLineFormatter extends Formatter {
public static Formatter withPackageFromRoot(String rootName) {
return new OneLineFormatter(rootName);
}
public static Formatter withClassOutputOnly() {
return new OneLineFormatter("");
}
private String rootName;
private OneLineFormatter(String rootName) {
this.rootName = rootName;
}
@Override
public String format(LogRecord record){<code>}
private String formatRecord(LogRecord record{<code that I want to override>}
}
第二類:
public class DebugFormatter extends OneLineFormatter {
public static Formatter withClassOutputOnly() {
return new DebugFormatter("");
}
public static Formatter withPackageFromRoot(String rootName) {
return new DebugFormatter(rootName);
}
private DebugFormatter(String rootName) {<same as OneLineFormatter(String)>}
@Override
private String formatRecord(LogRecord record) {<code>}
}
編輯1:添加代碼編輯2:更正的代碼
你可以只作出構造OneLineFormatter
package-private
或protected
。 這樣,您可以減少對構造函數的訪問,使其符合您的需求
OneLineFormatter(String rootName) {
this.rootName = rootName;
}
// OR
protected OneLineFormatter(String rootName) {
this.rootName = rootName;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.