java/android studio相当于c#/xamarin的“public event action varname”

3npbholx  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(305)

我被要求将一段代码从xamarin移植到android studio(c#to java),我正在努力移植一些东西,其中包括“public event action varname1”及其到java的实现。在
它们的用法如下:

public class class1: Java.Lang.Object{

public event Action varName1;
public event Action varName2;
...

//and they are called as 

varName1();
varName2();
//on the public void OnMove(MotionEvent motionEvent) method.

}

此外,它们还用于

class2:Activity{
void initialization()
  {
        class1 listener = new class1();

    listener.varName1 += class3.Open;
    listener.varName2 += class3.Close;
...
}

所以我假设每一个都可以被分解成两个需求,一个事件和一个没有参数的动作。由于操作来自系统,而且据我所知没有直接端口,所以我考虑使用在http://codingbytodesign.net/en/2016/06/06/actiont-and-funct-tresult-in-java-8/.
我也读过关于事件以及如何在java中处理它们的文章,发现这非常有用(https://scatteredcode.wordpress.com/2011/11/24/from-c-to-java-events/),但当我试图解决这两件事时,我甚至不知道从哪里开始。
我相信我可能把事情搞得太复杂了,所以我很想得到一些指导,或者如果有人能帮我举个例子来解决这个问题,我将不胜感激。

ffx8fchx

ffx8fchx1#

我不认为有直接的翻译。java通常做的是实现监听器接口,这是简单的回调。
所以你的例子可以写得有点像:

public interface MyListener {
   public void action1();
   public void action2();
}

然后您的类可以有一个构造函数,该构造函数将此接口作为参数并在以后调用它:

public class ListenerConsumer {
    MyListener listener;
    ListenerConsumer (MyListener listener) {
        this.listener = listener;
    }

    public void doSomething() {
        this.listener.action1();
    }

    public void doSomethingElse() {
        this.listener.action2();
    }
}

然后可以实现 MyListener 在构造 ListenerConsumer 比如:

ListenerConsumer derp = new ListenerConsumer(new MyListener() {
    @Override
    public void action1() {
        Toast.makeText(getContext(), "Hello action1", Toast.LENGTH_LONG).show();
    }

    @Override
    public void action1() {
        Toast.makeText(getContext(), "Hello action2", Toast.LENGTH_LONG).show();
    }
});

或者

相关问题