实现不同类中的类的方法

时间:2015-06-06 09:39:39

标签: java interface lambda

有一个类A,它有一个名为OnEvent的未定义方法。我希望这个方法由实例化类A Object的类定义。

像这样:

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

    public void method1(){ 
        ...

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

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

另一个课程,在另一个课程中:

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

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

    OnEvent(){
        //Do something
    }

}

我已经看过了,接口和/或lambda表达式是实现它的方法,但我无法成功完成。你能否提供一些关于如何做的指示?

3 个答案:

答案 0 :(得分:4)

您可以制作A课程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
        }
    };
    ...
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

一种方法(使用界面):

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;
    }
}