Как удалить System.out.println's из кодовой базы

Вы можете использовать getMIDINoteData(), чтобы получить массив AKMIDINoteData, отфильтровать ненужные ноты, а затем перезаписать музыкальную дорожку, используя replaceMIDINoteData() с фильтрованным массивом:

// remove a C at timestamp 4.0
var trackData = myTrack.getMIDINoteData()
trackData = trackData.filter { [110].noteNumber =! 60 && 
                               [110].duration =! AKDuration(beats: 4.0) }
myTrack.replaceMIDINoteData(with: trackData)

[117 ] Есть и другие примеры использования getMIDINoteData() в примере проекта MIDIFileEditAndSync .

9
задан amit 21 February 2009 в 03:41
поделиться

8 ответов

Сделайте, чтобы Вы рассмотрели глупый случай:

System.out.println(" Print " +  object.changeState() );

Я не думаю, что это происходит, но возможности являются println, выполняет метод, который на самом деле выполняет некоторое действие, на котором система зависит от и может представить тонкие ошибки (верьте мне или нет, но я засвидетельствовал это),

Вероятно, замена регистратором и отключение регистраторов могут сделать.

Или создание несуществующего объекта с помощью шаблона NullObject:

public final class DevNull { 
    public final static PrintStream out = new PrintStream(new OutputStream() {
        public void close() {}
        public void flush() {}
        public void write(byte[] b) {}
        public void write(byte[] b, int off, int len) {}
        public void write(int b) {}

    } );
}

И замена

 System.out.println();

С

 DevNull.out.println();
25
ответ дан 4 December 2019 в 05:59
поделиться

Log4E является плагином затмения, который имеет функцию "Replace System.out.println ()". Это счастливо преобразует все те противные вызовы println в вызовы log4j. Это даже перенесет их с проверкой уровня журнала.

12
ответ дан 4 December 2019 в 05:59
поделиться

При расширении понятия Оскара можно сделать еще лучше, по моему скромному мнению:

if(!DEBUG) {
    System.setOut(
        new PrintStream(new OutputStream() {
            public  void    close() {}
            public  void    flush() {}
            public  void    write(byte[] b) {}
            public  void    write(byte[] b, int off, int len) {}
            public  void    write(int b) {}

        } );
    }
}

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

8
ответ дан 4 December 2019 в 05:59
поделиться

Вы могли использовать условную компиляцию, чтобы иметь отладочную сборку с операторами печати и сборку конечных версий без них.

В основном идея состоит в том, чтобы создать заключительный статический класс с заключительной статической булевской переменной, которую Вы используете в качестве переключателя во время компиляции.

public final class Debug {
   //set to false to allow compiler to identify and eliminate
   //unreachable code
   public static final boolean ON = true;
}

Затем можно просто заменить весь Ваш System.out.println операторы с

if(Debug.ON)
{
    System.out.println...
}

Так как компилятор проигнорирует любые недостижимые ответвления кода, можно просто установить ON = false когда Вы сделаете сборка конечных версий и операторы печати будут исключены из Вашего байт-кода.

Примечание: Это не имеет дело со случаем, на который указал Оскар, где оператор печати может изменить состояние некоторого объекта. Вы могли использовать условную компиляцию для печати к несуществующему объекту, когда в режиме выпуска, поскольку он предложил, вместо того, чтобы удалить печать в целом.

2
ответ дан 4 December 2019 в 05:59
поделиться

Вы могли запустить путем вызова Systems.setOut и передачи в собственном OutputStream, который ничего не делает. Это поможет Вам видеть, существует ли усиление производительности. Это более безопасно, чем удаление их (по причине что Оскар, на который указывает - кодирование побочный эффект). Если увеличение производительности незначительно затем, Вы могли бы хотеть сфокусировать свои усилия в другом месте.

Две проблемы с моим выше метода:

  1. любой System.out.printlns, который Вы хотите сохранить, исчезнет также
  2. Строковая конкатенация все еще произойдет (и это может быть дорого, в зависимости от того, сколько существует),

Однако это - хороший быстрый тест, чтобы видеть, получаете ли Вы увеличение производительности, Вы ищете.

6
ответ дан 4 December 2019 в 05:59
поделиться

Лично я использовал бы {} вместо этого, но я думаю, что это работает все равно.

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

Я записал regex в жемчуге, который заменяет строку "System.out.println"";//System.out.println". Я полагаю, что существует очень немного случаев, где это повредило бы сборку. Это "еще" просто стало бы; который компилируется для обнуления инструкций по байт-коду.

Похоже, что это - то, что Вы предложили. Это работало на меня - кроме того, если у Вас есть дополнительные операторы на той же строке. Однако это - плохой стиль для начала (и я знал, что не сделал этого).

0
ответ дан 4 December 2019 в 05:59
поделиться

Вы полагали, что редактирование тех исходных файлов удаляет строки?

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

Я использовал Eclipse и уборку на функции сохранения к импорту очистки и материалу одновременно.

Вполне терапевтическая вещь сделать!

0
ответ дан 4 December 2019 в 05:59
поделиться
Другие вопросы по тегам:

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