Динамическая загрузка класса в Java с другим именем пакета
Можно ли загрузить класс в Java и «подделать» имя пакета / каноническое имя класса? Я попытался сделать это очевидным способом, но я получаю сообщение «имя класса не соответствует» вClassDefNotFoundException
.
Причина, по которой я это делаю, заключается в том, что я пытаюсь загрузить API, который был написан в пакете по умолчанию, чтобы я мог использовать его напрямую, без использования отражения. Код будет скомпилирован с классом в структуре папок, представляющей пакет и импорт имени пакета. то есть:
./com/DefaultPackageClass.class
// ...
import com.DefaultPackageClass;
import java.util.Vector;
// ...
Мой текущий код выглядит следующим образом:
public Class loadClass(String name) throws ClassNotFoundException {
if(!CLASS_NAME.equals(name))
return super.loadClass(name);
try {
URL myUrl = new URL(fileUrl);
URLConnection connection = myUrl.openConnection();
InputStream input = connection.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int data = input.read();
while(data != -1){
buffer.write(data);
data = input.read();
}
input.close();
byte[] classData = buffer.toByteArray();
return defineClass(CLASS_NAME,
classData, 0, classData.length);
} catch (MalformedURLException e) {
throw new UndeclaredThrowableException(e);
} catch (IOException e) {
throw new UndeclaredThrowableException(e);
}
}