Как привести объект в класс, загруженный в загрузчик классов
Я новичок в стек переполнения. Я создал объект загрузчика классов Groovy, в который я загрузил все классы, требуемые моим сценарием. У меня есть задача сериализации и десериализации объекта, созданного одним из классов, который загружается в загрузчик классов. Проблема в том, что при десериализации я не могу привести объект в класс как класс в загруженный в загрузчик классов. Я не знаю, как привести объект в класс, который загружен в загрузчик классов. Может ли кто-нибудь помочь мне в этом.????? ниже приведен фрагмент, который загружается в загрузчик классов, но как мне этого добиться?
Object o = null
new ByteArrayInputStream(bytes).withObjectInputStream(getClass().classLoader){ gin ->
o = (?????)gin.readObject() }
Заранее спасибо!!!
1 ответ
Мне удалось решить вашу проблему. Позвольте мне показать вам рабочий пример
Немного Employee
класс, который я использую
public class Employee implements java.io.Serializable
{
public String name;
public String address;
}
Тогда Main
учебный класс
class Main {
public static void main(String[] args) {
Employee e1 = new Employee()
e1.name = 'John'
e1.address = 'Main Street'
byte[] bytes = []
ByteArrayOutputStream stream = new ByteArrayOutputStream()
ObjectOutputStream out = new ObjectOutputStream(stream)
out.writeObject(e1)
bytes = stream.toByteArray()
out.close()
stream.close()
Object o = null
new ByteArrayInputStream(bytes).withObjectInputStream(Main.getClassLoader()){ gin ->
o = gin.readObject()
}
print o instanceof Employee
println 'Deserialized Employee...'
println 'Name: ' + o.name
println 'Address: ' + o.address
}
}
Вместо того чтобы делать getClass().classLoader
, который бросал java.lang.ClassNotFoundException
, Я делаю Main.getClassLoader()
, Этот загрузчик классов может найти мой Employee
учебный класс.
Более того, вам на самом деле не нужно кастовать объект, он отличный, динамичный, поэтому вы получаете name
а также address
поля во время выполнения.
Но вы всегда можете проверить тип объекта и затем привести его:
print o instanceof Employee
это вернется true