1

說,我有以下接口:getAnnotation對科特林方法使用的Java註釋返回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 
    } 
} 

由於我不理解的原因,productionQuery是n null。我仔細檢查了測試類中導入的Query和存儲庫中的Query的類型是否相同。

因此,在這種情況下爲什麼productionQuerynull

回答

4

您正在從實施類(即appRepository實例的類)加載註釋findAll,而不是從接口加載findAll。要從AppRepository加載註釋,請改爲:

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

dammit :)如此尷尬。 –