Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取java.lang包中所有类的集合(或集合)_Java_Compiler Construction_Compilation_Java.lang.class - Fatal编程技术网

获取java.lang包中所有类的集合(或集合)

获取java.lang包中所有类的集合(或集合),java,compiler-construction,compilation,java.lang.class,Java,Compiler Construction,Compilation,Java.lang.class,我正在为Java编写一个编译器,并且希望隐式地将Java.lang包导入所有源文件(我所知道的大多数Java编译器都是这样做的) 为此,我需要以某种方式获得所有类的集合(即,settry) String path=Object.class.getResource(“Object.class”).getPath().replace(“!/java/lang/Object.class”,”); ZipFile z=新ZipFile(新文件(新URI(路径)); 枚举“使其成为不太合适的候选对象”为什

我正在为Java编写一个编译器,并且希望隐式地将
Java.lang
包导入所有源文件(我所知道的大多数Java编译器都是这样做的)

为此,我需要以某种方式获得所有类的集合(即,
settry)

String path=Object.class.getResource(“Object.class”).getPath().replace(“!/java/lang/Object.class”,”);
ZipFile z=新ZipFile(新文件(新URI(路径));

枚举“使其成为不太合适的候选对象”为什么?请注意,您的编译器还需要隐式导入默认(无名称)包和源文件所在的包。首先,要求编译器必须能够自行编译,而我的编译器处理泛型的能力不是很好(更不用说反射和所有这些了)但是假设我们忽略了这一点,在实践中,当我添加从站点下载的jar及其依赖项(Guava和slf4j)时对于构建文件,项目仍然无法正确运行,我不断得到
java.lang.NoClassDefFoundError:com.google.common.base.Predicates
@andrewhompson(请参见上文,很抱歉我忘记标记)@PaulBellora这部分已经被正确处理了。我需要在这里添加一点“特性”,即隐式地使用
java.lang.*
imported@user1801813。它是java.util.zip包。嗯,我不确定是不是我的机器配置不好,但是
rt.jar
无法打开将文件与编译器一起打包是明智的做法?以下是我的
java.home\lib
中的所有内容:`ct.sym dt.jar ir.idl jconsole.jar orb.idl sa jdi.jar tools.jar`如果您在mac上,那么它就是classes.jar,路径可能类似于(“java.home”)+“/../classes/classes.jar
    String path = Object.class.getResource("Object.class").getPath().replace("!/java/lang/Object.class", "");
    ZipFile z = new ZipFile(new File(new URI(path)));
    Enumeration<? extends ZipEntry> e =z.entries();
    Set<String> s = new HashSet<String>();
    while(e.hasMoreElements()) {
        String n = e.nextElement().getName();
        if (n.matches("java/lang/\\w+\\.class")) {
            s.add(n);
        }
    }