[英]Kotlin unresolved reference :add after converting from Java code
I had java code which looked like this:我有看起来像这样的java代码:
public static <KEY, VALUE> Map<KEY, List<VALUE>> createMultimap(@NonNull Collection<VALUE> values, @NonNull TransformFunction<VALUE, KEY> transformFunction) {
Map<KEY, List<VALUE>> tmpMap = new HashMap<>();
for (VALUE value : values) {
if (value != null) {
KEY key = transformFunction.transform(value);
List<VALUE> valuesList = tmpMap.get(key);
if (valuesList == null) {
valuesList = new ArrayList<>();
tmpMap.put(key, valuesList);
}
valuesList.add(value);
}
}
return Collections.unmodifiableMap(tmpMap);
}
I converted it using Android Studio option 'convert to Kotlin'我使用 Android Studio 选项“转换为 Kotlin”将其转换
Here what is look like:这里看起来像:
fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, List<VALUE>> {
val tmpMap = HashMap<KEY, List<VALUE>>()
for (value in values) {
if (value != null) {
val key = transformFunction.transform(value)
var valuesList: List<VALUE>? = tmpMap[key]
if (valuesList == null) {
valuesList = ArrayList()
tmpMap.put(key, valuesList)
}
valuesList.add(value)
}
}
return Collections.unmodifiableMap(tmpMap)
}
The IDE now underlines the 'add' method here: IDE 现在在此处强调“添加”方法:
valuesList.add(value)
It says:它说:
unresolved reference :add
未解决的参考:添加
How can i fix this?我怎样才能解决这个问题?
UPDATE:更新:
Here is my transform function:这是我的变换函数:
interface TransformFunction<VALUE, RESULT> {
fun transform(value: VALUE?): RESULT
}
Sample usage:示例用法:
private fun getRSSIMultimap(rssiEvents: Collection<LocationRSSIEvent>): Map<NexoIdentifier, List<LocationRSSIEvent>> {
return CollectionsUtils.createMultimap(rssiEvents, object : CollectionsUtils.TransformFunction<LocationRSSIEvent, NexoIdentifier> {
override fun transform(locationRSSIEvent: LocationRSSIEvent): NexoIdentifier {
return locationRSSIEvent.nexoIdentifier
}
})
}
Since you'r assigning a List<> to your valuesList it doesnt know add().由于您将 List<> 分配给您的 valuesList,因此它不知道 add()。
Change it to将其更改为
fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, ArrayList<VALUE>> {
var valuesList: ArrayList<VALUE>? = tmpMap[key]
Better use Kotlins MutableList which is currently the same as Javas ArrayList but may be changed in later versions to a native method.最好使用 Kotlins MutableList ,它目前与 Javas ArrayList 相同,但在以后的版本中可能会更改为本地方法。
fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, MutableList<VALUE>> {
val tmpMap = HashMap<KEY, MutableList<VALUE>>()
for (value in values) {
if (value != null) {
val key = transformFunction.transform(value)
var valuesList: MutableList<VALUE>? = tmpMap[key]
if (valuesList == null) {
valuesList = mutableListOf()
tmpMap.put(key, valuesList)
}
valuesList.add(value)
}
}
return Collections.unmodifiableMap(tmpMap)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.