小编lik*_*ike的帖子

kotlin的通用参数Any转换为通配符(?)

使用kotlin和retrofit2时遇到问题,kotlin的通用参数被转换为通配符(?),但在Java中却没有。

现在,我需要Map<String, Object>在Java中使用一个参数(键是String类型,值不固定),将其转换为kotlin代码是Map<String, Any>

但是改造对它们的处理方式有所不同。

Map<String, Object>在Java中被编译成[java.util.Map<java.lang.String, java.lang.Object>],并且可以正常工作。

Map<String, Any>在kotlin中将其编译为[java.util.Map<java.lang.String, ?>],则retrofit2 抛出parameterError(参数类型不得包含类型变量或通配符)。

1?改装相关代码

public ServiceMethod build() {
    ……
    for (int p = 0; p < parameterCount; p++) {
        Type parameterType = parameterTypes[p];
        if (Utils.hasUnresolvableType(parameterType)) {
            throw parameterError(p, "Parameter type must not include a type variable or wildcard: %s", parameterType);
        }
        ……
    }
    ……
}
Run Code Online (Sandbox Code Playgroud)

Utils.hasUnresolvableType(parameterType)方法的引用如下

final class Utils {
    ……
    static boolean hasUnresolvableType(Type type) {
        ……
        if (type instanceof WildcardType) …
Run Code Online (Sandbox Code Playgroud)

any kotlin retrofit2

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

如何强制某些方法只对kotlin可见

我想要一些方法只对kotlin代码可见,而不是Java代码.

例如,这里的方法fun method(){}只能在kotlin代码中调用,不能在Java代码中调用.

java visible kotlin

5
推荐指数
1
解决办法
238
查看次数

标签 统计

kotlin ×2

any ×1

java ×1

retrofit2 ×1

visible ×1