Статический регистратор для кроссплатформенности, например Java (апплет) и Android - PullRequest
0 голосов
/ 19 ноября 2010

Я хочу использовать что-то вроде:

MyLogger.e("MyApp","I have an error.");

в кросс-платформенном проекте, где MyLogger должен быть статическим, чтобы сделать его доступным во всем проекте.что-то вроде:

MyAndroidLogger implements MyLogger {
   public static void e(String strApp, String strErr) {
     Log.e(strApp, strErr);
}

MyAppletLogger implements MyLogger {
   private static Logger logger = Logger.getLogger();
   public static void e(String strApp, String strErr) {
     logger.e(strApp, strErr);
}

Компилятор жалуется на статичность.Как мне это сделать?Это вообще возможно?Если нет, то какой подход правильный?

Заранее спасибо ...

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

Интерфейсы не имеют статических методов. Вот почему вы не можете вызвать их.

Вы можете попробовать использовать синглтон.

YourWhateverLogger.getInstance().e("Hello");
2 голосов
/ 19 ноября 2010

Вы не можете назвать интерфейс так, как пытаетесь.Вы должны вызвать либо

MyAndroidLogger.e("MyApp","I have an error.");

, либо

MyAppletLogger.e("MyApp","I have an error.");

Если вы хотите использовать один и тот же вызов на обеих платформах, вам нужно создать вспомогательный класс, который имеет ссылку на правильный класс:

MyLoggerHelper.e("MyApp","I have an error.");

, где MyLoggerHelper - это класс, который знает, какой из первых двух вызовов он должен вызвать, и перенаправляет этот вызов соответствующему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...