[英]Ambiguous method call in Intellij with Spring Data JPA interface
我有一個由 Intellij 報告的奇怪的模棱兩可的方法調用錯誤。 我正在使用一個 spring 數據 JPA 接口,它也實現了一個具有相同方法簽名的接口:
用戶庫:
@Repository
public interface UserRepository extends CrudRepository<User, String>, UserProvider {
}
用戶提供者:
public interface UserProvider {
User findOne(String userId);
}
撇開需要第二個接口的原因不談,我假設由於這些是接口並且 findOne 的方法簽名是相同的,編譯器將沒有問題處理歧義。 我是不是對 Java 的理解不正確,還是這是一個 Intellij 問題? CrudRepository 接口是通過泛型解決的問題嗎?
我遇到了同樣的問題。 在我的情況下,我的IDE(Eclipse)沒有報告錯誤,但是當從控制台通過Maven構建項目時,我在testCompile期間遇到了關於方法歧義的錯誤。
我懷疑這是由Eclipse和Maven使用的不同Java編譯器實現的,但即使我驗證它們都使用相同的JDK(jdk1.8.0_91),問題仍然存在。
但是,經過幾個小時的花費,我設法通過使用@RepositoryDefinition注釋我的存儲庫而不是從CrudRepository擴展它來克服這個問題。 使用您的樣本,它將是:
@RepositoryDefinition(domainClass = User.class, idClass = String.class)
public interface UserRepository extends UserProvider {
}
我相信findOne
現在是findById
,我遇到了同樣的錯誤。 我發現即使 IntelliJ 報告方法具有相同的簽名,它們實際上並不具有相同的簽名,因為CrudRepository
是通用的,而我的不是。
我相信如果您將UserProvider
更新為通用,錯誤就會消失:
// UserRepository
@Repository
public interface UserRepository extends CrudRepository<User, String>, UserProvider {
}
// UserProvider
public interface UserProvider<E, ID> {
E findOne(ID userId);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.