在不同的 class 中实现 class 的方法

Implement method for class in a different class

有一个 class A 有一个名为 OnEvent 的未定义方法。我希望此方法由实例化 class 对象的 class 定义。

像这样:

public class A{
    int someVar=1;
    float anotherVar=2;

    public void method1(){ 
        ...

        if( event )
            OnEvent();
        ...
    }

    //OnEvent is not defined!!
    OnEvent();
}

另一个 class,在不同的包中:

public class B{
    A objA = new A();

    public void method1(){ 
        //I need to do something like
        objA.setOnEvent( this.OnEvent() );
       }

    OnEvent(){
        //Do something
    }

}

我查了一下,接口 and/or lambda 表达式是实现它的方法,但我一直无法成功完成。您能否就如何操作提供一些指导?

一种方法(使用界面):

public interface OnEventInterface {
    public void OnEvent ();
}

public class B implements OnEventInterface {
    A objA = new A();

    public void method1(){ 
        //I need to do something like
        objA.setOnEvent( this );
       }

    OnEvent(){
        //Do something
    }

}

然后在 A 中:

public class A{
    int someVar=1;
    float anotherVar=2;
    private onEventInterface;

    public void method1(){ 
        ...

        if( event )
            onEventInterface.OnEvent();
        ...
    }

    public void setOnEvent (OnEventInterface handler) {
        onEventInterface = handler;
    }
}

您可以制作 A class abstract(以及 OnClick() 方法 abstract)`。

然后,您可以创建 A 的匿名实例,并直接为 OnClick() 提供实现。

例如:

public abstract class A{
    ...

    public abstract void OnEvent();
}

public class B{
    A objA = new A() {
        public void OnClick() {
            //OnClick implementation
        }
    };
    ...
}

这不是直接可能的。但是你可以委托方法:

public interface OnEvent {
    public void onEvent();
}

public class A {
    OnEvent delegate;

    public void onEvent() {
        delegate.onEvent();
    }

    public void setOnEvent(OnEvent delegate) {
        this.delegate = delegate;
    }
}

public class B implements OnEvent {
    public void onEvent() {
    }
}

delegation pattern