作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此问题与 this one 相同有点扭曲。
我有一个界面,例如:
@Repository
public interface InvoiceRepository extends JpaRepository<Invoice, String>{
// some other methods here
default Invoice save(Invoice invoice) {
//I do sth here
return JpaRepository.super.save(invoice); // wonT work
}
}
如何调用已实现的JPA接口(interface)的save方法?
<小时/>更新:事实上,我注意到,保存不是扩展 JPARepository
接口(interface)中的默认设置
在这种情况下,实现这一目标的最佳方法是什么?
覆盖保存方法
在重写的方法中调用父保存方法
最佳答案
您定义的默认方法是无能为力的,因为 Spring 将立即实现具有相同删除功能的方法(请参阅 CrudRepository.save()
)。
这里您不调用接口(interface)的默认
方法:
JpaRepository.super.save(invoice);
您调用 CrudRepository
的抽象 save()
方法。
但它无法编译,因为它是抽象
。
如果JpaRepository
父类(super class)定义了默认的save()
方法,它可以像引用的问题一样工作,但事实并非如此。
In this case, what would be the best way of achieving this ?
您可以创建一个具有不同名称的 default
方法,并从中调用 save()
,该方法在运行时将调用运行时 InvoiceRepository
实例:
default Invoice saveInvoice(Invoice invoice) {
// I do sth here
...
return save(invoice);
}
关于generics - 显式调用 java 中的默认方法 - 当实现的接口(interface)使用泛型时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52170007/
我是一名优秀的程序员,十分优秀!