我检查了如何重写泛型。考虑到CrudRepository
我可以覆盖:春季数据。覆盖通用接口方法
<S extends T> S save(S var1);
在我的仓库:
public interface ChannelDetailsRepository extends IgniteRepository<ChannelDetails, Long> {
@Override
default ChannelDetails save(ChannelDetails entity) {
throw new UnsupportedOperationException();
}
...
}
,但某些情况下,目前尚不清楚:
<S extends T> Iterable<S> save(Iterable<S> var1);
我已经尝试过使用(在同一ChannelDetailsRepository
接口)
@Override
default Iterable<ChannelDetails> save(Iterable<ChannelDetails> entities) {
throw new UnsupportedOperationException();
}
我的尝试失败,编译错误:
Error:(28, 38) java: name clash: save(java.lang.Iterable<com.nextiva.calendar.entity.ChannelDetails>) in com.nextiva.calendar.dao.ignite.ChannelDetailsRepository and <S>save(java.lang.Iterable<S>) in org.springframework.data.repository.CrudRepository have the same erasure, yet neither overrides the other
Error:(26, 5) java: method does not override or implement a method from a supertype
,我没有想法如何解决这个通用压倒一切。
简而言之:'
S保存(S VAR1)'意味着你的方法应该是对_any_'S'扩展'T',对某些特殊的'S'扩展'T'工作。您需要将'S'移动到类的类型参数中,而不是方法。 –