çalışma zamanı-derleme yaparkenHatalı Java paket sınıf adı yükleme aşağıdaki gibi bir Java çalışma zamanı derleyicisi olan kaynağını
public class SimpleClassLoader extends ClassLoader {
private String classname;
private byte[] byteCode;
public SimpleClassLoader(String classname, byte[] byteCode) {
super(SimpleClassLoader.class.getClassLoader());
this.classname = classname;
this.byteCode = byteCode;
}
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
if(name.equals(classname)){
return defineClass(name, byteCode, 0, byteCode.length);
}
return super.findClass(name);
}
}
derleme ve bir sınıf yükleme Sonuçta ortaya çıkan sınıfın paket adı, şu sınıf adıyla birleştirilir:
Compiler compiler = new Compiler();
String className = "example.test.TestClass";
String source = "package example.test; public class TestClass{}";
compiler.add(className, source);
compiler.compile();
byte[] byteCode = compiler.getByteCode(className);
Class<?> aClass = Class.forName(className, true, new SimpleClassLoader(className, byteCode));
System.out.println("Package: " + aClass.getPackage()); // Should be "example.text"
System.out.println("Name: " + aClass.getSimpleName()); // Should be "TestClass"
Outpu Bunun beklenmedik bir şekilde aşağıdaki gibidir:
Package: null
Name: TestClass
Burada nereye yanlış gidiyorum?
Ah) (aynı zamanda definePackage ile sınıfını tanımlayan paket tanımlamak gerekir benzeyen –