【发布时间】:2012-07-14 12:33:37
【问题描述】:
我想将一个实例从给定的 Java 类“扁平化”/转换为另一个仅包含原始类型的实例。
还必须递归地展平对象中的每个字段,而不是原始类型,以便生成的对象包含原始对象的展平视图,仅具有基本类型。
例如,给定以下类:
class Element {
int id_;
Position position_;
}
class Position {
int x_;
int y_;
}
结果实例的类型为:
class FlattenedElement {
int id_;
int x_;
int y_;
}
我会期待这样的行为:
Element e = new Person ( 42, new Position(0, 0) );
FlattenedElement fe = e.flatten();
是否有任何工具/库可以做到这一点?
或者我是否需要使用我采用的反射 API 编写自己的 flattener?
-- 编辑以下大多数 cmets--
我更改了示例以避免与 String 和 byte 混淆(我不必处理字符串)。
我需要在结果转换中保留数据的语义。输出的原始类型数据将直接参与使用 OpenCL 进行的并行计算,OpenCL 只理解原始数据类型。
换句话说,我需要打破封装,直接操作嵌入在类层次结构中的原始数据类型。
【问题讨论】:
-
有什么理由不将字符串展平为
char[]? -
是的。我想使用一个名为 Aparapi 的库,它只支持原始类型但
char;) -
使用反射编写自己的扁平化器。
-
应该足够简单来处理反射。但更好的问题是,你为什么会想要这样的东西?我想不出一个有意义的理由。我想我们可以很确定您在这里尝试解决错误的问题。
-
这是您要求的一项非常专业的任务,不要指望图书馆。您实际上是以一种非常非标准的方式序列化您的对象。也许将所有内容都变成
byte[]会少一些工作——这就是序列化为您所做的。
标签: java transform converter primitive-types flatten