Generics 在java中显式调用默认方法-当实现的接口使用泛型时
这个问题和一个扭曲的问题是一样的 我有一个界面,例如:Generics 在java中显式调用默认方法-当实现的接口使用泛型时,generics,inheritance,interface,java-8,default-method,Generics,Inheritance,Interface,Java 8,Default Method,这个问题和一个扭曲的问题是一样的 我有一个界面,例如: @Repository public interface InvoiceRepository extends JpaRepository<Invoice, String>{ // some other methods here default Invoice save(Invoice invoice) { //I do sth here return JpaRepository.s
@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
}
}
@存储库
公共接口InvoiceRepository扩展了JpaRepository{
//这里还有其他一些方法
默认发票保存(发票){
//我在这里做某事
返回JpaRepository.super.save(发票);//不起作用
}
}
如何调用已实现JPA接口的save方法?
更新: 实际上,我注意到,在扩展的
JPARepository
界面中,save不是默认值
在这种情况下,实现这一目标的最佳方式是什么
- 覆盖保存方法
- 调用重写方法中的父save方法
crudepository.save()
)
在这里,您不调用接口的默认方法:
JpaRepository.super.save(invoice);
调用crudepository
的抽象save()
方法
但是它不能编译,因为它是抽象的
如果JpaRepository
super类定义了一个默认的save()
方法,它可以像引用的问题一样工作,但事实并非如此
在这种情况下,实现这一目标的最佳方式是什么
您可以创建一个具有不同名称的default
方法,并从中调用save()
,该方法在运行时将调用运行时InvoiceRepository
实例:
default Invoice saveInvoice(Invoice invoice) {
// I do sth here
...
return save(invoice);
}
在您的情况下,方法save()
不是默认值
。根据代码,其定义为:
<S extends T> S save(S var1); // abstract, public
S保存(S var1);//摘要,公开
注意-值得一提的是,代码属于工件org.springframework.data:spring数据jpa:2.0.9.RELEASE
或者,如果我可以说,您的推断是错误的,“默认值
不是默认值。”事实上,我注意到,在JPARepository界面中,save不是默认值