Как привести объект в класс, загруженный в загрузчик классов

Я новичок в стек переполнения. Я создал объект загрузчика классов 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

Другие вопросы по тегам