kotlin过载分辨率模糊。所有这些功能都匹配

时间:2018-02-25 15:34:22

标签: kotlin

kotlin / jvm jdk8不支持代码

var buffer = StringBuffer();
var arr = arrayOf("1","2","3","4");
arr.forEach {buffer::append}

error info

java jdk8支持的代码,

String[] b = new String[]{"c", "b"};
Arrays.stream(b).forEach(buffer::append);

2 个答案:

答案 0 :(得分:2)

通常,如果要将方法引用(buffer::append)传递给采用lambda的方法,则需要将其括在括号中,而不是括号中。在此特定情况下,您无法将append方法作为方法引用传递,因为它返回StringBuilder,而forEach需要返回Unit的方法。

要使代码正常工作,请使用lambda:

arr.forEach { buffer.append(it) }

答案 1 :(得分:1)

你不能复制粘贴并使用类似的Stream代码,因为它最终解析错误。由于foreach块也包含数据,您可以这样做:

<body>
  <div class="background">
  </div>
  <div class="container">
    <section class="picture">
      <div class="intro">
        <h1 class="hidden">Hello, I'm Jenna!</h1>
        <h1 class="hidden">I make <em>websites</em>.</h1>
      </div>...
  </div> 
</body>

forEach块不会将方法作为参数,因此执行var buffer = StringBuffer(); var arr = arrayOf("1","2","3","4"); arr.forEach{buffer.append(it)} 不会添加任何数据,因为您必须自己执行此操作