delphi 子接口是否实现父接口_您可以从子类接口的接口调用父接口的默认方法吗?...

本文探讨了在Java 8中如何从子接口的实现类调用父接口的默认方法,同时保持代码的灵活性和避免副作用。通过示例展示了在接口继承层次中调用默认方法的复杂性,特别是在需要多级调用时。问题提出者希望找到一种方式,以避免创建匿名内部类来调用父接口的默认实现,同时确保子接口的实现能够访问和扩展这些默认行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Java 8中,我有类似以下内容:

package test;

public class SimpleFuncInterfaceTest {

public static void carryOutWork(AFunctionalInterface sfi){

sfi.doWork();

}

public static void main(String[] args) {

carryOutWork(() -> System.out.println("Do work in lambda exp impl..."));

AImplementor implementsA = new AImplementor();

//carryOutWork(() -> implementsA.doWork());

BImplementor implementsB = new BImplementor();

carryOutWork(() -> implementsB.doWork());

}

}

@FunctionalInterface

interface AFunctionalInterface {

public void doWork();

default public void doSomeWork(){

System.out.println("FOO");

}

}

@FunctionalInterface

interface BFunctionalInterface extends AFunctionalInterface {

@Override

default public void doSomeWork(){

System.out.println("BAR");//Unreachable in same object?

}

}

class AImplementor implements AFunctionalInterface {

@Override

public void doWork() {

doSomeWork();

}

}

class BImplementor extends AImplementor implements BFunctionalInterface {

public void doSomeWork(){

super.doSomeWork();

new BFunctionalInterface(){

@Override

public void doWork() {

}}.doSomeWork();

System.out.println("WUK WUK");

}

@Override

public void doWork() {

doSomeWork();

}

}

有没有一种方法可以从ImplementsB调用默认的功能接口行为,而不必创建匿名内部类并调用该内部类?

这会有副作用(两次调用ImplementsA的方法),需要调用父级的实现,然后让子级的实现能够调用子级的默认实现,并在需要时进行一些专门化。如您所见,调用父级的实现非常简单,但是我看不到一种避免重写默认实现的方法,除非我在实现子接口的类上添加了间接层,并且没有办法实现。

例如,如果A解锁或提供了对资源的访问权(例如数据库),而B解锁了第二个资源(另一个数据库),则我看不到任何方法使代码解锁A,然后B通过使用功能接口来强制执行此合同。

A和B被称为。 您可以执行一个深层次的操作,但是看起来不可能达到N级。

我打算使用lambda来避免进行昂贵的调用,而是对我的库用户强制执行操作的语义顺序。

这个问题与“在Java中显式调用默认方法” 并不 完全相同,因为此问题涉及的是N级深的接口,而不仅仅是调用父接口默认方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值