Xtend挑错了

时间:2013-07-17 00:22:19

标签: spring xtend

我正在玩Xtend,并遇到了障碍。

我的类使用Spring Data存储库。这是界面:

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

GraphRepository<T>的超级界面(part of 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)
    }
}

这会产生:

  

Bounds mismatch:type参数不是有效替代   方法的有界类型参数   保存(可迭代)

看起来好像Xtend正在选择错误的重载方法。

我尝试过添加类型提示,ala:

var UserNode user = repository.findByEntityId(1L)

但是这仍然会产生相同的错误。 我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

在Xtend邮件列表中,Sven建议他针对此问题提出错误:

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

他还提供了以下解决方法:

  

一个不太好的解决方案是覆盖相应的方法   UserRepository并用UserNode替换T,如下所示:

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);

答案 1 :(得分:1)

我不明白为什么你在方法上引入了额外的类型参数,你不能只使用类级别的那个吗?

@Transactional
T save(T entity);

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

这应该有效。

相关问题