基本上我有一个位置的ArrayList:
ArrayList<WorldLocation> locations = new ArrayList<WorldLocation>();
Run Code Online (Sandbox Code Playgroud)
下面我称之为以下方法:
.getMap();
Run Code Online (Sandbox Code Playgroud)
getMap()方法中的参数是:
getMap(WorldLocation... locations)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我不确定如何将整个列表locations传入该方法.
我试过了
.getMap(locations.toArray())
Run Code Online (Sandbox Code Playgroud)
但getMap不接受,因为它不接受Objects [].
现在,如果我使用
.getMap(locations.get(0));
Run Code Online (Sandbox Code Playgroud)
它会完美地工作......但我需要以某种方式传递所有位置...我当然可以继续添加locations.get(1), locations.get(2)等等但是阵列的大小各不相同.我只是不习惯整个概念ArrayList
最简单的方法是什么?我觉得我现在不想直接思考.
Kotlin不允许我的子类将vararg传递给我的超类构造器这是我的Operation类:
package br.com.xp.operation
import java.util.ArrayList
abstract class Operation(vararg values: Value) : Value {
protected var values: MutableList<Value> = ArrayList()
internal abstract val operator: String
}
Run Code Online (Sandbox Code Playgroud)
这是我的SubtractionOperation类:
package br.com.xp.operation
class SubtractionOperation private constructor(vararg values: Value) : Operation(values) {
override val operator: String
get() = "-"
}
Run Code Online (Sandbox Code Playgroud)
编译说:
类型不匹配必需值找到数组
任何人都可以解释为什么这是不可能的?
乍一看,只需将集合转换为数组并将其传递给方法,但这不起作用:
val toTypedArray = Arrays.asList("a", "b").toTypedArray()
Paths.get("", toTypedArray) // <- compilation error here
Run Code Online (Sandbox Code Playgroud)
没有解决方法???
注意我已经查看了以下问题/答案来解决问题而没有任何运气。 从 Kotlin 调用 Java Varargs Method - 这个方法在参数列表的末尾有可变参数参数,但我的问题是在参数列表的开头处理可变参数。 Kotlin:将 List 转换为 Java Varargs - 相同。其他搜索产生同样的结果。这些是我能找到的最接近的。
我正在String.split使用单个字符分隔符调用 Kotlin方法。这是一种vararg方法,其中vararg参数是多个参数中的第一个。该方法定义如下:
public fun CharSequence.split(vararg delimiters: Char,
ignoreCase: Boolean = false,
limit: Int = 0): List<String>
Run Code Online (Sandbox Code Playgroud)
当我调用如下方法时,它编译得很好:
fun String.splitRuleSymbol() : String = this.split(':') //ok
Run Code Online (Sandbox Code Playgroud)
但是当我尝试添加ignoreCase和limit参数时,出现问题:
fun String.splitRuleSymbol() : String = this.split(':', true, 2) //compiler error
Run Code Online (Sandbox Code Playgroud)
我得到的错误是...
不能使用提供的参数调用以下函数:
public fun CharSequence.split(vararg delimiters: String, ignoreCase: Boolean = ..., limit: Int = ...): kotlin.text …
我正在尝试接受 vararg 参数作为 Kotlin 中的函数参数,并尝试将其传递给另一个带有 vararg 参数的函数。但是,这样做会给我带来编译时错误type mismatch: inferred type is IntArray but Int was expected。
科特林:
fun a(vararg a: Int){
b(a) // type mismatch inferred type is IntArray but Int was expected
}
fun b(vararg b: Int){
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在 Java 中尝试相同的代码,它就会起作用。
爪哇:
void a(int... a) {
b(a); // works completely fine
}
void b(int... b) {
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?