我可以将匿名类或内部类编译成单个 java .class 文件吗?

问题描述 投票:0回答:1

我正在编写一个解析日志文件的 Java 类。 编译后的.class文件需要加载到第三方监控平台(eG)中进行部署和调用。 不幸的是,第 3 方平台只允许我上传单个 .class 文件。

我当前的实现有一个功能,可以在符合文件掩码(*CJL*.log)的文件夹中查找“最新”文件,并使用 2 个匿名类,一个用于过滤目录列表,另一个用于对文件列表进行排序基于 ModifiedDt。 当我编译这个文件时,我得到了 3 个 .class 文件(Monitor.class、Monitor$1.class、Monitor$2.class),我无法部署它们。

是否可以将匿名类编译成单个.class文件以部署到第3方监控平台?

我附上了“查找最新文件”功能的代码以供说明。

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 "";
    }
}

我想可以通过获取原始文件列表并自己进行过滤/排序来以“愚蠢”的方式做到这一点,但我担心这不会提高性能。

有什么想法吗?

java file
1个回答
4
投票

不,据我所知这是不可能的。我认为罐子也不能使用。

一种解决方法是让类实现这两个接口,以消除对内部类的需要。

    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 "";
       }
}
© www.soinside.com 2019 - 2024. All rights reserved.