【问题标题】:Compiler error while converting array to list?将数组转换为列表时出现编译器错误?
【发布时间】:2015-03-26 22:09:10
【问题描述】:

我正在尝试将 Cause 数组转换为 Cause 的 ArrayList,但出现此编译器错误:

Type mismatch: cannot convert from ArrayList<Cause> to Cause[]

这是实现:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MyException extends Exception

    private List<Cause> causes;

    public MyException(Cause... causes) {
        causes = new ArrayList<Cause>(Arrays.asList(causes));
    }

}

如何将我作为参数接收的原因转换为 List 成员? (我不想更改参数的类型)。你有什么想法吗?

【问题讨论】:

  • 认为错误在这部分 - (Arrays.asList(causes)).
  • causes 在您的构造函数中指的是什么?

标签: java arrays collections type-conversion


【解决方案1】:

构造函数中赋值的左侧指的是参数,而不是字段。 (还有一个{ 缺失)。您可以通过添加this. 来解决此问题:

public class MyException extends Exception {

    private List<Cause> causes;

    public MyException(Cause... causes) {
        this.causes = new ArrayList<Cause>(Arrays.asList(causes));
    }

}

【讨论】:

    【解决方案2】:

    令人困惑的错误是由于名称隐藏(即在同一范围内对两个不同的事物使用相同的名称);你有causes 作为你的类的一个字段,也作为构造函数的参数。如图所示重命名它,一切都很好:

    public class MyException extends Exception {
    
        private List<Cause> causes;
    
        public MyException(Cause... cs) {
            causes = new ArrayList<Cause>(Arrays.asList(cs));
        }
    }
    

    更新:正如 cmets 正确指出的那样,当您引用该字段时,您通常可以通过使用 this 将其显式地告知编译器来解决此问题:

    public class MyException extends Exception {
    
        private List<Cause> causes;
    
        public MyException(Cause... causes) {
            this.causes = new ArrayList<Cause>(Arrays.asList(causes));
        }
    }
    

    【讨论】:

    • 或者使用通用模式this.causes = ...来初始化成员。
    • 虽然你的回答很有帮助,但为什么你的 Lists of String?
    • 好点,我在测试代码时将它们更改为字符串;将编辑答案。
    【解决方案3】:

    参数String... causescauses[]相同。如果要将其转换为列表,则需要声明一个新变量:

      List<Cause> causesList = Arrays.asList(causes);
    

    或者直接显式引用你的成员类变量

       this.causes = Arrays.asList(causes);
    

    【讨论】:

      【解决方案4】:

      您已将cause 声明为List&lt;Cause&gt; -

      private List<Cause> causes;  
      

      并尝试将causes(已经是arrayList)转换为此处的数组 -

      causes = new ArrayList<Cause>(Arrays.asList(causes));  
      

      尝试从声明或方法参数中更改causes

      【讨论】:

        猜你喜欢
        • 2020-11-14
        • 1970-01-01
        • 2014-08-12
        • 2017-10-25
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多