Как Вы уменьшаете Java, регистрирующий шаблонный код?

Я не проверял это, но я не могу прикрепить событие к некоторой анимации.

Я думаю, вы должны сделать это следующим образом

btn1 нажал кнопку вызова function1 function1: запустить анимацию 1 на 2 с после вызова 2s function2 (пользователь setTimeout)

function2: запустить анимацию 2 на 1 с после вызова 1 с некоторая другая функция

15
задан Steven Huwig 17 October 2008 в 15:41
поделиться

9 ответов

Мне настраивали шаблон в Eclipse так, чтобы я только ввел часть объявления, и затем Eclipse автоматически заполнит остальных для меня.

${:import(org.apache.log4j.Logger)}
private final static Logger log = Logger.getLogger(${enclosing_type}.class);
${cursor}

Так, я только имею к типу logger, совершаю нападки Ctrl+Space, сопровождаемый Enter, и Eclipse заполняет остальных для меня и добавляет объявление импорта также.

Это не сократит объем шаблонного кода, но по крайней мере он сокращает объем нажатий клавиш.

12
ответ дан 1 December 2019 в 02:47
поделиться

Взгляните на использование точки, включает Ваш код

, я не оглянулся назад начиная с использования их с пружиной.

Вот статья об использовании AspectJ

http://www.developer.com/java/other/article.php/3109831

4
ответ дан 1 December 2019 в 02:47
поделиться

Вам не нужен getName () при использовании 1.2 +, версия log4j, getLogger () принимает аргумент Класса. Но что касается остальных, нет никакого пути вокруг этого, если Вы хотите, чтобы каждый класс имел статического участника журнала со своей собственной категорией.

2
ответ дан 1 December 2019 в 02:47
поделиться

В зависимости от Ваших потребностей входа Вы могли создать класс "LoggingService" со статическими методами для входа к различным "каналам". Я нашел, что мне действительно не нужна регистрирующаяся гранулярность вниз к уровню класса. Можно назвать регистраторы что каждый работы лучше всего для Вас. Мы использовали это в больших, корпоративных приложениях в течение нескольких лет, и гранулярность действительно не была проблемой для нас.

сервис входа, инициализированный в статическом блоке инициализатора... так для входа сообщения:

LoggingService.logError ("вздор");

Никакой шаблонный код в каждом классе.

Вот сервис входа в качестве примера:

public class LoggingService {

/**
 * A log for informational messages.
 */
static private Logger infoLog;

/**
 * A log for data access messages.
 */
static private Logger dataAccessLog;

/**
 * A log for debug messages.
 */
static private Logger debugLog;

/**
 * A log for error messages.
 */
static private Logger errorLog;

/**
 * A log for all XML related messages.
 */
static private Logger xmlLog;

/**
 * A log for all trace messages.
 */
static private Logger traceLog;

/**
 * A log for all warning messages.
 */
static private Logger warnLog;

static {

    //This is the bootstrap for the logging service.
    //Setup each logger
    infoLog = Logger.getLogger("com.company.logging.info");
    dataAccessLog = Logger.getLogger("com.company.logging.dataaccess");
    debugLog = Logger.getLogger("com.company.logging.debug");
    errorLog = Logger.getLogger("com.company.logging.error");
    xmlLog = Logger.getLogger("com.company.logging.xml");
    traceLog = Logger.getLogger("com.company.logging.trace");
    warnLog = Logger.getLogger("com.company.logging.warn");

    // This must be set so isErrorEnabled() will work.
    errorLog.setLevel(Level.ERROR);
    warnLog.setLevel(Level.WARN);
}
static public void logDataAccess(String pMessage) {
    dataAccessLog.info(pMessage);
}

static public void logInfo(String pMessage) {
    infoLog.info(pMessage);
}

static public void logDebug(String pMessage) {
    debugLog.debug(pMessage);
}

static public void logTrace(String pMessage) {
    traceLog.debug(pMessage);
}

static public void logWarn(String pMessage) {
    warnLog.warn(pMessage);
}

static public void logError(String pMessage) {
    errorLog.error(pMessage);
}

static public void logError(String pMessage, Throwable pThrowable) {
    errorLog.error(pMessage, pThrowable);
}

static public void logXml(String pMessage, XmlBean pContainer) {

    if (!xmlLog.isInfoEnabled()) return;

    xmlLog.info(pMessage + " : " + JAXBHelper.marshal(pContainer));
}

static public boolean isInfoEnabled() {
    return infoLog.isInfoEnabled();
}

static public boolean isDataAccessEnabled() {
    return dataAccessLog.isInfoEnabled();
}

static public boolean isDebugEnabled() {
    return debugLog.isDebugEnabled();
}

static public boolean isErrorEnabled() {
    if (errorLog.getLevel().toInt() >= Level.ERROR_INT) {
        return true;
    }
    return false;
}

static public boolean isTraceEnabled() {
    return traceLog.isDebugEnabled();
}

static public boolean isXmlEnabled() {
    return xmlLog.isInfoEnabled();
}

static public boolean isWarnEnabled() {
    return warnLog.isEnabledFor(Level.WARN);
}

}

3
ответ дан 1 December 2019 в 02:47
поделиться

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

private static final Logger log = Logs.log;

существуют взломы для чтения имени класса вызывающей стороны (на самом деле, регистрирующаяся реализация имеет взлом для обнаружения существующего метода), но я не рекомендовал бы это.

2
ответ дан 1 December 2019 в 02:47
поделиться

На самом деле обычная практика использования имен классов для названий регистратора является ленивыми больше, чем что-нибудь.

Намного лучшая практика должна назвать регистраторы контекстом задачи. Это включает несколько больше мыслительного процесса и планирования, но в конце, результатом является намного больше meanigful гранулярности, где можно переключить регистрирующиеся уровни для фактических задач, а не классов.

3
ответ дан 1 December 2019 в 02:47
поделиться

Вы можете стенография это крошечный бит, поскольку getLogger перегружается к также, просто посещают урок. Как так:

public class MyClass {
    private static Logger _log = Logger.getLogger(MyClass.class);
}

Регистратор может быть как fleixble или негибок, поскольку Вы хотите, чтобы он был. Можно захватить новый регистратор для каждого класса, как в примере выше, и иметь иерархию регистраторов, где можно управлять и стать включения - выключения вход классом. Или если Ваш проект является маленьким или прототип, и т.д., Вы могли бы просто назвать Logger.getRootLogger () - но Вы потеряете гибкость подстройки, что Вы регистрируете и не регистрируете. У Вас мог быть базовый класс, где регистратор живет, и сделайте, чтобы все назвали тот, но снова, Вы теряете некоторую гибкость:

public class MyBase {
     protected static Logger _log = Logger.getLogger(MyClass.class);
}

public class MyClass extends MyBase {
    ....
    _log.info("Stuff....");
}

Нижняя строка, если Вы хотите сохранить способность подстроить, настраивает Ваш вход позже в проект (включите более прекрасную отладку уровня всего для одного класса), тогда Вам, вероятно, придется придерживаться шаблона в каждом классе.

0
ответ дан 1 December 2019 в 02:47
поделиться

При создании регистратора нестатичным можно, по крайней мере, наследовать его:

public class SomeBaseClass
{
    protected Logger logger = Logger.getLogger(getClass());
}

public class SubClass extends SomeBaseClass
{
    public void doit() { logger.debug("doit!!!!"); }
}

Это - то, как я всегда делал это.

-1
ответ дан 1 December 2019 в 02:47
поделиться

Смотрите на SLF4J

0
ответ дан 1 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: