我正在为二进制文件格式编写解析器。我创建了类来表示我正在阅读的反序列化结构,我想在其中使用最终变量来保存提取的数据。
class MyObject {
final int my_x;
final int my_y;
final int my_z;
}
我遇到的问题是某些字段的存在取决于设置的某些标志。例如:
MyObject(InputStream is) {
my_x = in.read();
if (my_x == 1) {
my_y = in.read();
if (my_y == 1) {
my_z = in.read();
}
}
}
但是,这给了我一个错误,因为my_y和my_z可能没有被初始化。这些条件可以有 5-6 级深,我不想跟踪在分支树的每一级可能不会读取哪些字段。另一个复杂因素是,基于某些标志,我可能希望使用与顶级结构相同的模式来处理子对象。
class MyObject {
final int my_x;
final SubObject my_subobject;
MyObject(InputStream is) {
my_x = is.read();
if (my_x == 1)
my_subobject = new SubObject(is);
}
class SubObject {
final int sub_x;
final int sub_y;
SubObject(InputStream is) {
sub_x = is.read();
if (sub_x == 1)
sub_y = is.read();
}
}
}
有什么方法可以使我的字段最终化,而无需扭曲代码来处理每种可能的标志组合?