用于Kotlin方法的Java注释的getAnnotation返回null

说,我有以下界面:

interface AppRepository : GraphRepository<App> { @Query("""MATCH (a:App) RETURN a""") fun findAll(): List<App> } 

在测试中,我想检查查询字符串的具体情况,因此我做

 open class AppRepositoryTest { lateinit @Autowired var appRepository: AppRepository @Test open fun checkQuery() { val productionMethod = appRepository.javaClass.getDeclaredMethod("findAll") val productionQuery = productionMethod!!.getAnnotation(Query::class.java) //demo test assertThat(productionQuery!!.value).isNotEmpty() //KotlinNPE } } 

由于我不理解的原因, productionQuerynull 。 我已经双重检查了测试类中导入的Query的类型和存储库中的Query是相同的。

因此,在这种情况下为什么productionQuery null

您正在从实现类(即appRepository实例的类)上加载对findAll注释,而不是从接口的findAll 。 要从AppRepository加载注释:

 val productionMethod = AppRepository::class.java.getDeclaredMethod("findAll") val productionQuery = productionMethod!!.getAnnotation(Query::class.java)