有没有 Java 大佬分析这是什么错误

2022-11-15 00:29:17 +08:00
 movq
 public int maximumUnits(int[][] boxTypes, int truckSize) {
            Arrays.sort(boxTypes,
                    Comparator.comparingInt(a -> a[1]).reversed());

提示error: array required, but Object found Comparator.comparingInt(a -> a[1]).reversed());

IDEA 对a -> a[1]里面的a[1]标红

我看Comparator.comparingInt返回了一个 Comparator 对象,对这个对象调用 reversed 为什么不行呢

2537 次点击
所在节点    程序员
13 条回复
Jooooooooo
2022-11-15 00:38:39 +08:00
array required
mind3x
2022-11-15 00:48:32 +08:00
javac 的类型推导比较残,不知道你这里的 a 是 int[]类型。解决办法是告诉它:

```lang=java
Arrays.sort(boxTypes, Comparator.<int[]>comparingInt(a -> a[1]).reversed());
```

这也相当于
```lang=java
Arrays.sort(boxTypes, Comparator.comparingInt(a -> ((int[])a)[1]).reversed());
```
mind3x
2022-11-15 00:49:09 +08:00
所以 V2EX 的 markdown 应该怎么用 [掀桌]
mind3x
2022-11-15 00:56:22 +08:00
更正一下,看起来不是 javac 的问题。你原本的代码 javac 编译是没问题的,是 IntelliJ 自身的类型推导有问题。我的版本是 2022.2.3 Ultimate.
jinliming2
2022-11-15 02:04:53 +08:00
@mind3x 只能发帖的时候发 markdown ,回帖的时候不行
Pantheoon
2022-11-15 09:25:49 +08:00
我以为又是啥 crazy ThUrsday 的新段子🙈
Achieve7
2022-11-15 09:39:42 +08:00
Comparator 需要泛型, 不然就是 Object, 无法进行类型推倒
movq
2022-11-15 09:56:44 +08:00
@Achieve7 那为什么不用 reverse 就行呢
movq
2022-11-15 10:57:19 +08:00
@mind3x 我用 javac 编译也提示错误。` javac -version` 显示`javac 19`
movq
2022-11-15 10:58:36 +08:00
@mind3x 按照

```lang=java
Arrays.sort(boxTypes, Comparator.<int[]>comparingInt(a -> a[1]).reversed());
```

这种写法则 IDEA 和 javac 都不报错
oceanthe1h
2022-11-15 14:06:58 +08:00
每日一题
lisongeee
2022-11-15 14:43:07 +08:00
@mind3x

> 所以 V2EX 的 markdown 应该怎么用 [掀桌]

[v2ex 评论 markdown 支持]( https://greasyfork.org/zh-CN/scripts/449771-v2ex%E8%AF%84%E8%AE%BAmarkdown%E6%94%AF%E6%8C%81)
mind3x
2022-11-15 16:27:05 +08:00
@movq 啊,是的,javac 也推导不了,因为加上 `reversed` 以后,之前的类型信息就丢了。我用 javac 试的时候忘记加`reversed`了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/895267

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX