我正在构建一个 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
注释进行编译。