获取java.lang包中所有类的集合(或集合)
我正在为Java编写一个编译器,并且希望隐式地将获取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.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);
}
}