我有一個抽象基類記錄,有說我要來當代碼是創建由派生類自動設置一個實例變量。因此,這裏的基類:Java的派生類不會自動生成實例
abstract public class CLog
{
/** Maintains the call stack level for each thread */
private static HashMap<Integer, Integer> callStackLevel = new HashMap<Integer, Integer>();
/** Static instance to be set by the derived class */
private static CLog instance = null;
/** Logs in verbose */
public static void v(String message) { if(instance != null) instance.verbose(getMessage(message)); }
/** Logs in debug */
public static void d(String message) { if(instance != null) instance.debug(getMessage(message)); }
/** Logs in informational */
public static void i(String message) { if(instance != null) instance.info(getMessage(message)); }
/** Logs in warning */
public static void w(String message) { if(instance != null) instance.warn(getMessage(message)); }
/** Logs in error */
public static void e(String message) { if(instance != null) instance.error(getMessage(message)); }
/**
* Calculates the message (with header)
*/
private static String getMessage(String message)
{
...
}
/** Constructor sets instance */
protected CLog() { instance = this; }
/** Logs in verbose */
protected abstract void verbose(String message);
/** Logs in debug */
protected abstract void debug(String message);
/** Logs in informational */
protected abstract void info(String message);
/** Logs in warning */
protected abstract void warn(String message);
/** Logs in error */
protected abstract void error(String message);
}
我的一個Android記錄器創建派生類。我希望它能夠自動調用構造函數,但似乎這不起作用,因爲我的所有日志記錄函數都沒有產生任何結果。
public class AndroidLog extends CLog
{
protected static AndroidLog derived = new AndroidLog();
@Override
protected void debug(String message) {
Log.d("Crystal", message);
}
@Override
protected void error(String message) {
Log.e("Crystal", message);
}
@Override
protected void info(String message) {
Log.i("Crystal", message);
}
@Override
protected void verbose(String message) {
Log.v("Crystal", message);
}
@Override
protected void warn(String message) {
Log.w("Crystal", message);
}
}
爲什麼這不起作用?當我在基類中調用靜態函數時,我沒有得到任何日誌。
反正只是通過編輯此AndroidLog類或通過在堵塞類,它是不依賴於AndroidLog,使這項工作做編輯?
我不明白你想要做什麼。你是否在任何地方引用'AndroidLog'?如果不是,那麼它將不會被加載,因此構造函數從不會調用:類的純存在不會導致它被加載,它需要在某處引用。 – 2011-04-20 07:21:44
在哪裏以及如何定義'Log'符號,併爲其創建對象? – 2011-04-20 07:23:32
@Joachim所以即使我已經在派生類中聲明瞭一個靜態變量並將其設置爲等於該類的一個實例,但除非在類之外引用它,否則不會創建該變量? – 2011-04-20 07:26:52