如何通过安全Args传递通用数据类型?

时间:2019-10-15 12:03:58

标签: android android-safe-args

我需要将Kotlin的Pair作为参数传递。


<argument android:name="data" app:argType="kotlin.Pair" />
e: CreateCodeFragmentDirections.kt: (16, 15): 2 type arguments expected for class Pair<out A, out B>

<argument android:name="data" app:argType="kotlin.Pair<String, String>" />
Cause: markup not allowed inside attribute value - illegal <  (position: TEXT seen ...<argument android:name="data" app:argType="kotlin.Pair<... @132:30) 

<argument android:name="data" app:argType="kotlin.Pair&lt;String, String&gt;" />
Can't escape identifier `Pair<String, String>` because it contains illegal characters: <>

以上尝试均无效。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我认为无法使用泛型类型参数,因此您必须像在第一种情况中那样回退到原始泛型。我正在使用Java,并且可以正常编译,但是我认为您的Java不允许,因为Kotlin不允许原始通用用法。 实际上,我发现使用最后一个带有单个类型参数的方法,生成的代码包含严重错误。最后,在我看来,根本不支持泛型类型,也许在将来...最好是请求该功能,与此同时,您可以尝试分离参数(如果适用)或使用非泛型的super类型(对象??必须为可打包/可序列化),具有强制类型转换,或者您可能想创建自己的非泛型Pair类并仅强制转换组件或特定的“ StringStringPair”或将所有参数分组为单个非常规键入...或切换到Java。