У меня есть базовый класс абстрактного логгера, в котором есть переменная экземпляра, которую я хочу, чтобы производный класс автоматически устанавливал код при создании кода.Итак, вот базовый класс:
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 или редактирование в классе CLog, которое не зависит от AndroidLog, чтобысделать эту работу?