gradle忽略了kotlin jvmname?

时间:2016-05-18 09:25:54

标签: android jvm kotlin kotlin-android-extensions

我正在构建一个Android应用程序并尝试使用Gradle编译一段kotlin代码。我有@JvmName,但似乎忽略了注释,因此编译失败。

@JvmName("setOptionsForPairs")
private fun setOptionsFor(field: JSONObject, options: MutableList<Pair<Int, String>>, spinner: Spinner?){
    options.plusAssign(json2pairs(field.getJSONObject("options")))
    setOptions(options.map { it.second }, spinner)
}

private fun setOptionsFor(field: JSONObject, options: MutableList<String>, spinner: Spinner?){
    val candidates = field.getJSONArray("options")
    for (i in 0..candidates.length() - 1) options.add(candidates.getString(i))
    setOptions(options, spinner)
}

Gradle告诉我:由于上述函数的签名导致平台声明冲突。 我错过了什么?我应该告诉Gradle明确地处理注释还是别的什么?

根据@Ilya的建议,我创建了以下最小的完整示例。这段代码可以编译。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val dogs = mutableListOf(Dog("John"), Dog("Betty"))
        val people = mutableListOf(Person("Tom"), Person("Karo"))

        greet(dogs)
        greet(people)
    }

    @JvmName("greetPeople")
    private fun greet(people: MutableList<Person>) {
        print("Hello ${people.map { it.name }.joinToString(",")}")
    }

    private fun greet(people: MutableList<Dog>) {
        print("Hello ${people.map { it.name }.joinToString(",")}")
    }
}

data class Person(val name: String)

data class Dog(val name: String)

我还检查了min SDK版本是否可能导致问题,但是对于最小的完整示例,我使用相同的最小版本的21版本并且编译。我从函数名称中删除了private,然后编译使用@JvmName注释。

0 个答案:

没有答案