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