簡體   English   中英

帶有 Spring Data JPA 接口的 Intellij 中的二義性方法調用

[英]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),問題仍然存在。

但是,經過幾個小時的花費,我設法通過使用@RepositoryDe​​finition注釋我的存儲庫而不是從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM