1

私は Xtend で遊んでいて、障害にぶつかりました。

私のクラスは Spring Data リポジトリを使用しています。インターフェースは次のとおりです。

public interface UserRepository extends GraphRepository<UserNode>, RelationshipOperationsRepository<UserNode> {
        public UserNode findByEntityId(Long entityId);
}

GraphRepository<T>(私のプロジェクトではなく、 Spring Data の一部である)のスーパーインターフェイスは、次を宣言します。

@Transactional
<U extends T> U save(U entity);

@Transactional
<U extends T> Iterable<U> save(Iterable<U> entities);

ただし、次のコードは失敗します。

// UpdateUserProcessorExample.xtend
class UpdateUserProcessorExample {
    @Autowired
    UserRepository repository

    def updateUser()
    {
        var user = repository.findByEntityId(1L)
        // The following line generates an error:
        repository.save(user)
    }
}

これにより、次が生成されます。

境界の不一致: 型引数は、メソッド save(Iterable) の境界型パラメーターの有効な代替ではありません

Xtend が間違ったオーバーロードされたメソッドを選択しているように見えます。

タイプヒントを追加してみました、ala:

var UserNode user = repository.findByEntityId(1L)

しかし、これでも同じエラーが発生します。ここで何が間違っていますか?

4

2 に答える 2

2

Xtend メーリング リストで、Sven はこの問題についてバグを報告したことを報告しました。

https://bugs.eclipse.org/bugs/show_bug.cgi?id=413138

彼はまた、次の回避策を提供しました。

あまり良くない解決策は、次のように、UserRepository のそれぞれのメソッドをオーバーライドし、T を UserNode に置き換えることです。

public interface UserRepo extends GraphRepository<UserNode> {
    UserNode findByEntityId(Long entityId);

    @Override UserNode save(UserNode entity);

    @Override <U extends UserNode> Iterable<? extends U> save(Iterable<? extends U> entities);
于 2013-07-17T22:31:16.380 に答える