在 return 语句中找不到适合 ArrayList<String> .toArray(String[]::new) 的方法

Posted

技术标签:

【中文标题】在 return 语句中找不到适合 ArrayList<String> .toArray(String[]::new) 的方法【英文标题】:No suitable method found for ArrayList<String> .toArray(String[]::new) in return statement 【发布时间】:2019-03-14 05:05:01 【问题描述】:

我正在网站上工作Codingbat,特别是 AP-1 中的这种方法

public String[] wordsWithout(String[] words, String target) 
  ArrayList<String> al = new ArrayList<>(Arrays.asList(words));
  al.removeIf(s -> s.equals(target));
  return al.toArray(new String[al.size()]);

这个实现是有效的,它是当前提交的,但是当我将返回语句更改为

return al.toArray(String[]::new);

据我所知应该可以工作,但会出现以下错误:

no suitable method found for toArray((size)->ne[...]size])
method java.util.Collection.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface))
method java.util.List.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface))
method java.util.AbstractCollection.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface))
method java.util.ArrayList.<T>toArray(T[]) is not applicable
  (cannot infer type-variable(s) T
    (argument mismatch; Array is not a functional interface)) line:4

有人能解释一下为什么这不起作用吗?

【问题讨论】:

【参考方案1】:

这个:

al.toArray(String[]::new)

自 java-11 起仅支持通过:

default <T> T[] toArray(IntFunction<T[]> generator) 
     return toArray(generator.apply(0));

如果您想使用该方法引用,则必须先stream(),例如:

 al.stream().toArray(String[]::new)

【讨论】:

以上是关于在 return 语句中找不到适合 ArrayList<String> .toArray(String[]::new) 的方法的主要内容,如果未能解决你的问题,请参考以下文章

我在 xcode6.4 中找不到对齐和固定按钮来调整方面适合的约束

在 Qt3D 中找不到适合 QUrl 的导入器插件 - .dae 对象

在 JMETER JDBC 连接配置中找不到适合 jdbc:mysql://localhost:3306/Testing 的驱动程序

在语句中找不到 Spring Hibernate JPA HSQL 表

TypeScript 导入语句在 Expo 项目中找不到 Firebase 模块

我在这个条件语句中找不到逻辑错误。我不完全知道我的逻辑在哪里不正确