Java 既然可以使用旧变量,为什么还要创建新变量并使用它?

Java 既然可以使用旧变量,为什么还要创建新变量并使用它?,java,android,arrays,android-arrayadapter,Java,Android,Arrays,Android Arrayadapter,为什么我们需要:- 创建一个视图x 然后设置x=a 如果可以直接使用a,则在x上使用if命令 @Override public View getView(int position, View convertView, ViewGroup parent) { // check if the current view is reused else inflate the view View listItemView = convertView; if(listItemVi

为什么我们需要:-

  • 创建一个视图x
  • 然后设置x=a
  • 如果可以直接使用a,则在x上使用if命令

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        // check if the current view is reused else inflate the view
        View listItemView = convertView;
    
        if(listItemView == null){
            listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
        }
    
  • 相反,我们为什么不能这样做

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        if(convertView == null){
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
        }
    

    第二个选项也非常有效。我不知道你为什么认为你做不到


    只需确保在完成其他操作后返回
    convertView

    第一个和第二个示例有效。仅当第一种情况下您正在创建类变量的本地副本时。这是无用的。开发人员为什么这样做?谁知道呢:)


    关于通货膨胀。充气操作有些昂贵,因为您的适配器项是相同的,所以只能充气一次视图。

    在某些情况下,开发人员希望分配一个值
    LayoutInflater。from(…)。充气(…)
    ,与参数
    convertView
    不同,他选择不覆盖参数,但是引入一个新的变量。不修改方法参数是一种很好的风格

    因此,在
    convertView
    为空的情况下,
    listItemView
    LayoutInflater
    调用中获取一个值,以便在方法的后面使用。使用
    null
    参数调用该方法的事实仍然可见

    作为一种更简洁的替代方法,可以使用Java的三元运算符:

    View listItemView = convertView != null ?
            convertView :
            LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
    

    通过这种方式,变量甚至可以声明为final

    ,您可以再解释一下,比如为什么第二个代码也是有效的。它之所以有效,是因为它可以工作。你能再解释一下吗,比如为什么第二个代码无效?我没说第二个代码无效。我的意思是,第一个代码是我见过的许多开发人员所做的常见实践。我真正的问题是为什么要创建一个你根本不需要的无用变量。你问过“为什么我们不能这样做?”我说你也可以这样做。做同一件事有多种方法。这两种方法都是完全有效的。我不知道为什么开发人员更喜欢第一个。不过我更喜欢第二个。不建议更改原始数据。谢谢,你能详细说明一下“充气操作有些昂贵”吗?请看这里,用图片详细说明。