使用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) 我想要一些方法只对kotlin代码可见,而不是Java代码.
例如,这里的方法fun method(){}只能在kotlin代码中调用,不能在Java代码中调用.