3

我正在构建一个 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)

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

4

0 回答 0