Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 高效克隆不支持克隆的未知对象_Java - Fatal编程技术网

Java 高效克隆不支持克隆的未知对象

Java 高效克隆不支持克隆的未知对象,java,Java,我正在构建一个框架,在这个框架中,我需要在运行时复制对象,我不想强制这些对象类实现任何接口,比如Cloneable、Prototype模式或其他任何东西 因此,出于这个目的,我计划使用sun.misc.Unsafe的功能及其方法高效地克隆这些对象:allocateInstance(Class cls)和copyMemory(Object srcBase、long srcfostate、Object destBase、long destfostate、long bytes)。但是我找不到任何方法来

我正在构建一个框架,在这个框架中,我需要在运行时复制对象,我不想强制这些对象类实现任何接口,比如Cloneable、Prototype模式或其他任何东西

因此,出于这个目的,我计划使用
sun.misc.Unsafe
的功能及其方法高效地克隆这些对象:
allocateInstance(Class cls)
copyMemory(Object srcBase、long srcfostate、Object destBase、long destfostate、long bytes)
。但是我找不到任何方法来获取堆空间中对象的大小(以字节为单位)

我知道我可以使用反射和从一个字段复制到另一个字段。但这并不是没有效率的。
您知道如何获取堆中对象的大小吗?或者其他有效复制对象的方法?

正确的方法实际上是使用对象自己的方法、构造函数和工厂进行复制<“代码>克隆”在没有像这样滥用它的情况下已经损坏得很严重了。

正确的方法实际上是,诚实地说,使用对象自己的方法、构造函数和工厂进行复制
clone
在没有像这样滥用它的情况下已经足够坏了。

一旦我使用ASM字节码检测工具,那么我就可以通过类
java.lang.instrumentation
中的方法
getObjectSize(Object objectToSize)
获得对象的大小。问题已解决。

一旦我使用ASM字节码检测工具,我就可以通过类
java.lang.instrumentation
中的方法
getObjectSize(Object objectToSize)
获取对象的大小。问题已解决。

您无法复制任意对象。这样做可能很危险。你想干什么?你会受伤的!我试图在运行时复制一个对象,但在编译时我没有关于该对象的任何以前的信息。我既不能强迫它实现任何接口,也不能提供任何工厂或其他任何东西。可能的副本不能复制任意对象。这样做可能很危险。你想干什么?你会受伤的!我试图在运行时复制一个对象,但在编译时我没有关于该对象的任何以前的信息。我既不能强迫它实现任何接口,也不能提供任何工厂或其他任何东西。克隆的可能副本会被滥用。。。O:-)如果您真的想要滥用,请使用一个无辜的类,将其子类化为实现
Cloneable
:)也许我没有解释清楚,但我说的是一个“未知对象”。某些对象,您在编译时没有任何信息,并且无法强制实现任何特定接口。请重构代码,直到您在编译时获得这些信息。实际上没有其他选择——当然,我不相信有任何方法可以处理任意的
对象
。一旦我使用ASM字节码检测工具,我就可以通过方法
getObjectSize(Object objectToSize)获得对象的大小
来自类
java.lang.instrument.Instrumentation
。问题解决了克隆人会被滥用。。。O:-)如果您真的想要滥用,请使用一个无辜的类,将其子类化为实现
Cloneable
:)也许我没有解释清楚,但我说的是一个“未知对象”。某些对象,您在编译时没有任何信息,并且无法强制实现任何特定接口。请重构代码,直到您在编译时获得这些信息。实际上没有其他选择——当然,我不相信有任何方法可以处理任意的
对象
。一旦我使用ASM字节码检测工具,我就可以通过方法
getObjectSize(Object objectToSize)获得对象的大小
来自类
java.lang.instrument.Instrumentation
。问题解决了。