我爲我的控制檯輸出編寫了一個java.util.logging.Formatter(名爲OneLineFormatter)。它有兩個靜態工廠方法,都調用私有構造函數。繼承和靜態工廠方法
現在我想編程第二個用於調試目的(名爲DebugFormatter),它只覆蓋OneLineFormatter中的formatRecord方法,因此跟蹤打印也不僅僅是本地化的消息和類。
Eclipse警告我超級構造函數OneLineFormatter()是未定義的,我必須調用另一個構造函數。我GOOGLE了這個問題,發現這個:StackOverflow上的Java error: Implicit super constructor is undefined for default constructor。 但我不想創建一個公共構造函數,因爲這會違反工廠原則。工廠方法和構造函數可以相同(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:糾正代碼
請在問題中包含您的代碼。沒有它,通過閱讀你的描述來分析哪裏出錯是很困難的。 – SomeJavaGuy
我會拼接出廠的OneLineFormater代碼。所以你可以擴展OnlineFormater而不是工廠。 –
@ReneM。工廠方法可以保持不變,我只是想重寫OneLineFormatter中的formatRecord(LogRecord)方法 – kaesaecracker