返回语句中没有找到适合的方法可用于 ArrayList<String> .toArray(String[]::new)。

14
我正在处理 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个回答

16

这个:

al.toArray(String[]::new)

只有在Java-11及以上版本中才支持以下功能:

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

如果您想使用该方法引用,您需要先使用stream(),例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接