【问题标题】:Can I compile anonymous or inner classes into a single java .class file?我可以将匿名类或内部类编译成单个 java .class 文件吗?
【发布时间】:2009-06-10 00:55:43
【问题描述】:

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

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

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

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

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 compiler-construction


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊哈!杰出的!我完全没有想到这一点。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多