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

标签 java android static inner-classes android-4.4-kitkat

我正在解决 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版本高于或等于lollipop的设备上运行此代码时,在Android Studio的 Debug模式下看到该对象的这些变量的顺序与我们在代码中定义的相同。 但是当在Android版本低于lollipop(如Kitkat)的设备上运行相同的代码时,会观察到一个奇怪的现象。现在,通过 Android Studio 的调试器查看同一对象时,这些变量的顺序完全不同。

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

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

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

最佳答案

This object returned in the above function is mapped into XML in the order it is formed.

这真是个糟糕的主意。

What is the reason of this strange phenomenon?

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

Does Android have different behaviors for static inner classes call in different versions?

据我所知,编译后的代码不要求其字段和其他成员按任何特定顺序排列。此外,其他工具(例如 ProGuard)可能会在处理过程中改变顺序。

关于java - 内部静态类的新实例在 Lollipop 之前的设备中具有不同顺序的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48210196/

相关文章:

node.js - nodejs 挂起 express 静态文件

java - 在服务或 servlet 中重新使用 com.google.gson.Gson 对象?

java - JFrame/JLabel 问题

java - 广播接收器 onReceive 在 fragment 中不起作用

android - 检查url是否被缓存webview android

java - 堆栈溢出java

java测试带有静态字段的对象

java - 指向 Java 中的用户配置文件框架的指针

java - JUnit 规则临时文件夹

android - 设置自定义监听器以监听整个应用程序