内部静态类的新实例在棒棒糖之前的设备中具有不同顺序的变量



我正在处理Android应用程序现有代码库中的错误。我们有一个静态内部类,如下所示:

public class MyOuterClass{
private MyInnerClass myInnerClassObject;
private int someOtherVariable;
// getter and setter of my inner class
public MyInnerClass getMyInnerClassObject(){
return myInnerClassObject;
}
public void setMyInnerClassObject(MyInnerClass myInnerClassObject){
this.myInnerClassObject = myInnerClassObject;
}
public static class MyInnerClass{
private int variable1;
private int variable2;
private int variable 3;
...
// here are getters and setters for above variables in same order which I have skipped.
}

现在调用上述代码的地方如下:

private MyInnerClass getMyInnerClassObject(AnotherObject anotherObject){
MyInnerClass myInnerClassObject = new MyInnerClass();
myInnerClassObject.setFirstVariable(anotherObject.getFirstValue);
myInnerClassObject.setSecondVariable(anotherObject.getSecondValue);
myInnerClassObject.setThirdVariable(anotherObject.getThirdValue);
...
return myInnerClassObject;
}

在上述函数中返回的此对象按其形成顺序映射到 XML。那里出现了问题。 在Android版本大于或等于棒棒糖的设备中运行此代码时,在Android Studio的调试模式下看到此对象的这些变量的顺序与我们在代码中定义的顺序相同。 但是,当在Android版本低于棒棒糖的设备(如Kitkat)中运行相同的代码时,观察到一种奇怪的现象。通过Android Studio的调试器查看相同的对象现在以完全不同的顺序具有这些变量。

这给我带来了问题,因为我的 Web 服务的请求 XML 在映射的棒棒糖设备中形成,具有不同顺序的元素,从而给我带来了问题。

这种奇怪现象的原因是什么?Android 在不同版本中对静态内部类调用是否有不同的行为?

出于代码机密性的原因,我更改了变量和类的名称。希望我试图解释的流程是清楚的。请随时发表评论以进行任何澄清。

在上述函数中返回的此对象按其形成的顺序映射到 XML。

这是一个非常糟糕的主意。

这种奇怪现象的原因是什么?

您使用了有缺陷的方法来生成 XML。

Android 在不同版本中对静态内部类调用是否有不同的行为?

AFAIK,编译的代码不需要按任何特定顺序显示其字段和其他成员。此外,其他工具(如 ProGuard)可能会在处理过程中更改顺序。

最新更新