相关疑难解决方法(0)

如何将ArrayList传递给varargs方法参数?

基本上我有一个位置的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

最简单的方法是什么?我觉得我现在不想直接思考.

java variadic-functions

205
推荐指数
3
解决办法
11万
查看次数

如何将vararg传递给Kotlin中的varag函数或构造函数?

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)

编译说:

类型不匹配必需值找到数组

任何人都可以解释为什么这是不可能的?

kotlin

17
推荐指数
1
解决办法
4133
查看次数

如何将kotlin系列作为varagrs传递?

乍一看,只需将集合转换为数组并将其传递给方法,但这不起作用:

val toTypedArray = Arrays.asList("a", "b").toTypedArray()
Paths.get("", toTypedArray) // <- compilation error here
Run Code Online (Sandbox Code Playgroud)

没有解决方法???

java arrays collections kotlin

8
推荐指数
1
解决办法
816
查看次数

以 Vararg 作为第一个参数的 Kotlin 方法

注意我已经查看了以下问题/答案来解决问题而没有任何运气。 从 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)

但是当我尝试添加ignoreCaselimit参数时,出现问题:

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 …

parameter-passing kotlin

5
推荐指数
2
解决办法
4313
查看次数

将 vararg 参数传递给 Kotlin 中的另一个函数时出现编译时错误

我正在尝试接受 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)

我该如何解决这个问题?

java android kotlin kotlin-interop

3
推荐指数
1
解决办法
866
查看次数