This question already has answers here:
How to import a class from default package
                                
                                    (9个答案)
                                
                        
                                3年前关闭。
            
                    
我在ByteBufferGuard文件中设置了一个小的project和一个小的最终类ByteBufferGuard.java

final class ByteBufferGuard {
    @FunctionalInterface
    static interface BufferCleaner {
        void freeBuffer(String resourceDescription, ByteBuffer b) throws IOException;
    }
}


然后是另一个类,MMapDirectory.java。好吧,在此类中,我不能仅通过导入来引用BufferCleaner,因为:

import ByteBufferGuard.BufferCleaner;

返回:


  无法解析符号ByteBufferGuard


但这很奇怪,因为只有ByteBufferGuard被标记为红色,它确实看到接下来出现的是BufferCleaner

这两个类位于相同的gradle默认根包下,即src/main/java/

在寻找类似的答案时,我已经尝试过“使缓存无效/重新启动”,并且还删除了.idea文件夹并再次打开该项目。.到目前为止没有成功。

可以说这不是一个障碍,因为我可以用BufferCleaner替换ByteBufferGuard.BufferCleaner的所有引用,但仍然令我困扰,所以我想解决这个问题。

您知道可能是什么问题吗?

Java 1.8 u112

intellij 2017.1 EAP

另一个有趣的事实是,使用Kotlin进行的完全相同的导入操作就像一个魅力。

最佳答案

请勿使用default package(未命名的程序包)-如果将两个文件都移动到程序包(子目录)中,则应该可以使用。

package some.package;

final class ByteBufferGuard {
    @FunctionalInterface
    static interface BufferCleaner {
        void freeBuffer(String resourceDescription, ByteBuffer b) throws IOException;
    }
}




package some.package;

import some.package.ByteBufferGuard.BufferCleaner;

public class MapDirectory {
    private BufferCleaner cleaner;
    // ...
}


(经过日食测试,但应该相同)

无法从default package导入类:


https://stackoverflow.com/a/7849460/85421
How to import a class from default package

09-04 09:36