코드를 만들 때 파생 클래스에서 자동으로 설정하려는 인스턴스 변수가있는 기본 추상 로거 클래스가 있습니다. 기본 클래스는 다음과 같습니다.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);
}
나는 안드로이드 로거 용 파생 클래스를 만듭니다. 나는 그것이 생성자를 자동으로 호출하기를 원하지만 모든 로깅 함수로 인해 아무것도 발생하지 않기 때문에 이것이 작동하지 않는 것 같습니다.
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에 종속되지 않는 CLog 클래스를 편집하여이 작업을 수행 할 수 있습니까?
나는 당신이하려는 것을 정확히 이해하지 못합니다. 어디서나'AndroidLog'를 참조하십니까? 그렇지 않으면 클래스가로드되지 않고 생성자가 호출되지 않습니다. 클래스의 순수한 존재는 **로드되지 않기 때문에 어딘가에서 참조해야합니다. –
'Log' 심볼은 어디에 정의되어 있으며, 어떻게 그것에 할당 된 객체가 생성됩니까? –
@Joachim 따라서 파생 클래스에서 정적 변수를 선언하고 클래스의 인스턴스와 같게 설정하더라도 클래스 외부에서 참조되지 않으면 클래스가 만들어지지 않습니다. –