Groovy 如何在类装入器中装入的类中强制转换对象

Groovy 如何在类装入器中装入的类中强制转换对象,groovy,casting,groovyclassloader,Groovy,Casting,Groovyclassloader,我不熟悉堆栈溢出。我创建了一个Groovy类装入器的对象,在该对象中装入了脚本所需的所有类。我的任务是序列化和反序列化为类装入器中装入的类之一创建的对象。问题是在反序列化时,我无法将类中的对象强制转换为类装入器中装入的类。我不知道如何在类装入器中装入的类中强制转换对象。有人能帮我吗。这个在下面的代码段中,有一个类是在类加载器中加载的,但我应该如何实现这一点 Object o = null new ByteArrayInputStream(bytes).withObjectInputStream(

我不熟悉堆栈溢出。我创建了一个Groovy类装入器的对象,在该对象中装入了脚本所需的所有类。我的任务是序列化和反序列化为类装入器中装入的类之一创建的对象。问题是在反序列化时,我无法将类中的对象强制转换为类装入器中装入的类。我不知道如何在类装入器中装入的类中强制转换对象。有人能帮我吗。这个在下面的代码段中,有一个类是在类加载器中加载的,但我应该如何实现这一点

Object o = null
new ByteArrayInputStream(bytes).withObjectInputStream(getClass().classLoader){ gin ->
                                o = (?????)gin.readObject() }

提前感谢

我设法解决了你的问题。让我给你看一个工作示例

我使用的一些
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
    }
}
我现在做的不是
Main.getClassLoader()
,它抛出了一个
java.lang.ClassNotFoundException
,而是
Main.getClassLoader()
。这个类加载器能够找到我的
员工

此外,您实际上不需要强制转换对象,它是groovy,是动态的,因此您可以在运行时获得
name
address
字段

但是,您始终可以检查对象的类型,然后对其进行强制转换:

print o instanceof Employee

这将返回
true

您的代码现在是什么样子?我的回答有用吗?是的,你的回答有用。