Java 使用 Android Studio 调试时代码执行不正确

Java code executing incorrectly when debugging with Android Studio

我的 Android 应用程序中有此代码:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if(viewType == POST_VIEW_TYPE){
        View view = LayoutInflater.from(App.instance).inflate(R.layout.item_post, parent, false);
        return new PostViewHolder(view);
    }else{
        View view = LayoutInflater.from(App.instance).inflate(R.layout.item_user, parent, false);
        return new UserViewHolder(view);
    }
}

代码基本上得到一个名为 viewType 的常量,并相应地膨胀正确的视图。我的常量 POST_VIEW_TYPE 等于 1:

到目前为止一切顺利。我将 viewType 作为 1 传递给我的处理程序,但代码以某种方式评估 else 分支,即使 if 中的(非常简单的)表达式评估为 true(显然):

这怎么可能?

更新: 我已经清理并重建了项目,但没有任何改变。我在 if 语句上设置了一个断点。这是我逐步调试调试器时演示的 GIF:

我已经解决了这个问题,感谢 Mike M. 在 Android Studio debugger highlights the wrong lines 上指出了类似的问题。

显然,正确的代码 正在 执行,但由于我的代码中其他地方存在完全不相关的错误,它掩盖了问题,并且由于调试器行为不正确,我我只是认为发生了与此问题相关的事情。我已经修复了另一个错误,并将 onCreateViewHolder 中的代码更改为:

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder holder = null;
    if(viewType == POST_VIEW_TYPE){
        View view = LayoutInflater.from(App.instance).inflate(R.layout.item_post, parent, false);
        holder = new PostViewHolder(view);
    }else{
        View view = LayoutInflater.from(App.instance).inflate(R.layout.item_user, parent, false);
        holder = new UserViewHolder(view);
    }
    return holder;
}

它现在可以正常工作(和调试)。有趣的是 Google 自己的 IDE for Android 无法单步执行(甚至不显示警告,告诉调试可能由于多个 return 路径)Dalvik 生成的代码。我希望 ART 解决了这个问题。