Могу ли я скомпилировать анонимные или внутренние классы в один файл Java .class? - PullRequest
0 голосов
/ 10 июня 2009

Я пишу класс Java, который анализирует файлы журнала. Скомпилированный файл .class должен быть загружен в стороннюю платформу мониторинга (eG) для развертывания и вызова. К сожалению, сторонняя платформа позволяет загружать только один файл .class.

Моя текущая реализация имеет функцию для поиска «последнего» файла в папке, которая соответствует маске файла (* CJL * .log) и использует 2 анонимных класса, один для фильтрации списка каталогов и другой для сортировки списка. файлов на основе ModifiedDt. При компиляции я получаю 3 файла .class (Monitor.class, Monitor $ 1.class, Monitor $ 2.class), которые я не могу развернуть.

Можно ли скомпилировать анонимные классы в один файл .class для развертывания на сторонней платформе мониторинга?

Я приложил код моей функции «Найти последний файл» для иллюстрации.

private String FindLatestFile(String folderPath) {
    FilenameFilter filter = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            if (name.endsWith(".log")
                    & name.contains("CJL")) 
                return true;
            else
                return false;
        }
    };

    File dir = new File(folderPath);

    File[] files = dir.listFiles(filter);

    if (files.length > 0) {
        Arrays.sort(files, new Comparator<File>() {
            public int compare(File f1, File f2) {
                return Long.valueOf(f1.lastModified()).compareTo(
                        f2.lastModified());
            }
        });

        File newest = files[files.length - 1];

        return newest.toString;
    } else {
        return "";
    }
}

Я полагаю, что это можно сделать 'глупым' способом, получив список необработанных файлов и выполнив фильтр / сортировку самостоятельно, но я боюсь, что это не будет эффективным.

Есть идеи?

Michael

1 Ответ

4 голосов
/ 10 июня 2009

Нет, это не возможно, афаик. Я предполагаю, что банка также не может быть использована.

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

    class MyClass implements FilenameFilter, Comparator<File> {
    ...

    public boolean accept(File dir, String name) {
         if (name.endsWith(".log") & name.contains("CJL")) 
              return true;
         else
              return false;
    }

    public int compare(File f1, File f2) {
         return Long.valueOf(f1.lastModified()).compareTo(
                 f2.lastModified());
    }

    private String FindLatestFile(String folderPath) {

       File dir = new File(folderPath);

       File[] files = dir.listFiles(this);

       if (files.length > 0) {
            Arrays.sort(files, this);

            File newest = files[files.length - 1];

            return newest.toString;
       } else {
            return "";
       }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...