Tag: kotlinreflection

KotlinReflectionInternalError数据类

尝试在Retrofit服务中使用数据类作为结果types时收到以下错误。 11-15 11:35:38.345 14693-14693/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 14693 kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Incorrect resolution sequence for Java constructor public constructor AuthenticationResponse() defined in com.example.app.data.auth.AuthenticationResponse[JavaClassConstructorDescriptor@6d57dc3] (kotlin.reflect.jvm.internal.impl.load.java.structure.reflect.ReflectJavaClass: class com.example.app.data.auth.AuthenticationResponse) at kotlin.reflect.jvm.internal.RuntimeTypeMapper.mapSignature(RuntimeTypeMapper.kt:202) at kotlin.reflect.jvm.internal.KFunctionImpl.(KFunctionImpl.kt:46) at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:87) at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:39) at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93) at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) at kotlin.reflect.jvm.internal.KClassImpl$Data.getConstructors(Unknown Source:7) at kotlin.reflect.jvm.internal.KClassImpl.getConstructors(KClassImpl.kt:192) at kotlin.reflect.full.KClasses.getPrimaryConstructor(KClasses.kt:40) at com.squareup.moshi.KotlinJsonAdapterFactory.create(KotlinJsonAdapter.kt:160) at com.squareup.moshi.Moshi.adapter(Moshi.java:100) at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:90) at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:328) […]

如何获得Kotlin的KType?

我正在尝试Kotlin中的reflectionfunction,但似乎无法理解如何获取KType值。 假设我有一个将短语映射到对象工厂的类。 在不明确的情况下,用户可以提供一个type参数,将搜索范围缩小到仅返回该types对象(或某个子types)的工厂。 fun mapToFactory(phrase: Phrase, type: KType = Any::class): Any {…} type需要接受几乎任何东西,包括Int ,这从我的经验似乎有点特别对待。 默认情况下,它应该是Any东西,这意味着“不排除任何工厂”。 如何分配默认值(或任何值)来type ?

Kotlin检查函数是否需要实例参数

如果一个KCallable是使用Any()::toString创建的,那么当它被引用时,你不需要传递Any实例(当使用call )。 虽然如果它是使用Any::toString (不是Any一个实例)创建的,它需要传递一个Any实例。 所以我的问题是如何轻松地找出是否需要传递该实例参数,并且此参数是必需的? 我find了一个方法来做到这一点: callable.parameters[0].kind == KParameter.Kind.INSTANCE 但它不是很好,我想知道是否有一个更容易或推荐的方法来解决这个问题。 谢谢!

什么时候在Spring Boot应用程序的生命周期中Kotlin内省可用?

我遇到了一个令人惊讶的错误。 我正在尝试使用存储库模式访问mongodb的应用程序。 为了减少代码重复,我想为所有的存储库建立一个通用的基类。 每个根集合(如下面的代码中的Person )的RepositoryBase将从此RepositoryBaseinheritance,并inheritance所有常用function。 data class Person(val name: String) open class RepositoryBase (val template: ReactiveMongoTemplate, private val klass: KClass) { fun count(): Mono = template.count(Query(), klass.java) } @Repository class PersonRepository(template: ReactiveMongoTemplate): RepositoryBase(template, Person::class) @RunWith(SpringRunner::class) @SpringBootTest class DemoApplicationTests { @Autowired var personRepository: PersonRepository? = null @Test fun contextLoads() { println(personRepository?.count()?.block()!!) } } 但是,这似乎并不奏效: java.lang.IllegalArgumentException:指定为非null的参数为null:方法kotlin.jvm.JvmClassMappingKt.getJavaClass,参数$ receiver […]

对Kotlin中的默认参数使用callBy时出错

我尝试调用带有默认参数值的函数,而不将参数放在Kotlin中。 例如: class Test { fun callMeWithoutParams(value : Double = 0.5) = value * 0.5 fun callIt(name: String) = this.javaClass.kotlin .members.first { it.name == name } .callBy(emptyMap()) } fun main(args: Array) { println(Test().callIt(“callMeWithoutParams”)) } 我有个例外: Exception in thread “main” java.lang.IllegalArgumentException: No argument provided for a required parameter: instance of fun Test.callMeWithoutParams(kotlin.Double): kotlin.Double at kotlin.reflect.jvm.internal.KCallableImpl.callDefaultMethod(KCallableImpl.kt:139) at […]