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