从接口调用超级方法
Calling super method from interface
我想从扩展另一个接口的接口中使用相同名称的重写方法调用超级方法
示例:
default private interface A {
void foo() {
System.out.println("B");
}
}
private interface B extends A {
@Override
default void foo() {
System.out.println("B");
}
}
我想调用classC(implements interface B).foo()
以输出
结尾
B
A.foo() call
我怎样才能做到这一点?
在我的例子中,我不想实现接口 B,因为它是一个扩展 JpaRepository
的接口,我只是使用这个接口调用存储库方法。
更新:
我举错了例子,那不是在描述我的问题。以下是我的具体问题的描述。
在将对象保存到数据库之前,我想对该对象进行一些操作。我正在使用接口存储库。我想覆盖 Repository.save(Object o)
方法,并在那里进行更改,但我无法从扩展存储库调用超级方法。
示例:
public interface FooRepository extends MongoRepository<Foo, String> {
@Override
default <S extends Foo> S save(S s) {
s.doSth();
return MongoRepository.super.save(s); //This doesn't compile
}
}
我知道我可以通过创建 class 并在其中注入 FooRepository
来做到这一点,但是有没有办法通过重写 FooRepository
中的 save()
方法来做到这一点=]?
在方法 foo() 的 B
接口中,您可以这样调用 A.foo()
:
@Override
default void foo() {
System.out.println("B");
A.super.foo();
}
我认为您不能在不实现接口 B 的情况下调用该方法。JPA 在幕后创建了 JpaRepository 接口的 framework-made 实现,您无法访问该实现以调用 foo 方法。
我想从扩展另一个接口的接口中使用相同名称的重写方法调用超级方法
示例:
default private interface A {
void foo() {
System.out.println("B");
}
}
private interface B extends A {
@Override
default void foo() {
System.out.println("B");
}
}
我想调用classC(implements interface B).foo()
以输出
B
A.foo() call
我怎样才能做到这一点?
在我的例子中,我不想实现接口 B,因为它是一个扩展 JpaRepository
的接口,我只是使用这个接口调用存储库方法。
更新:
我举错了例子,那不是在描述我的问题。以下是我的具体问题的描述。
在将对象保存到数据库之前,我想对该对象进行一些操作。我正在使用接口存储库。我想覆盖 Repository.save(Object o)
方法,并在那里进行更改,但我无法从扩展存储库调用超级方法。
示例:
public interface FooRepository extends MongoRepository<Foo, String> {
@Override
default <S extends Foo> S save(S s) {
s.doSth();
return MongoRepository.super.save(s); //This doesn't compile
}
}
我知道我可以通过创建 class 并在其中注入 FooRepository
来做到这一点,但是有没有办法通过重写 FooRepository
中的 save()
方法来做到这一点=]?
在方法 foo() 的 B
接口中,您可以这样调用 A.foo()
:
@Override
default void foo() {
System.out.println("B");
A.super.foo();
}
我认为您不能在不实现接口 B 的情况下调用该方法。JPA 在幕后创建了 JpaRepository 接口的 framework-made 实现,您无法访问该实现以调用 foo 方法。