为什么铸造会导致错误?根据我的理解,int num将被隐式转换为double,但现在为了避免这个错误,我需要做temp.add((double) num);
public void test(int[] nums) {
List<Double> temp = new ArrayList<>();
for (int num: nums) {
temp.add(num);
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
Playground Debug
Line 6: error: no suitable method found for add(int)
temp.add(num);
^
method Collection.add(Double) is not applicable
(argument mismatch; int cannot be converted to Double)
method List.add(Double) is not applicable
(argument mismatch; int cannot be converted to Double)
Run Code Online (Sandbox Code Playgroud)
您有一个 s 列表,并且您正在尝试向其中Double添加一个...int
这个说法
temp.add(num);
Run Code Online (Sandbox Code Playgroud)
首先需要装箱num为其包装形式,即java.lang.Integer,然后将其添加到列表中(因为列表采用引用类型,而不是基元)。
接下来发生的事情是您尝试将 an 添加Integer到 s 的集合中Double。这是不允许的。Integer不是 的子类Double。这些是兄弟类型(它们都是 的子类Number),但Double与 不兼容Integer。
根据我的理解,int num 将隐式转换为 double
当目标是double,是的,这个数字就会提升。但如果目标是Double,编译器拒绝隐式执行此操作(在将其设为 之前,它必须将您的intto装箱,并且会失败)。IntegerDouble
如果您想要快速修复,可以使用double以下类型num:
for (double num: nums) {
temp.add(num);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7110 次 |
| 最近记录: |