如何停止在Java中重复我自己

如何停止在Java中重复我自己,java,android,Java,Android,在JavaScript中,我不止一次使用回调方法,因为JavaScript是一种异步语言 例如: function missionOne () { sumCalculation(1, 2, function (result) { console.log(result) // writes 3 }) } function sumCalculation (param1, param2, callback) { let result = param1 + par

在JavaScript中,我不止一次使用回调方法,因为JavaScript是一种异步语言

例如:

function missionOne () {
    sumCalculation(1, 2, function (result) {
        console.log(result) // writes 3
    })
}

function sumCalculation (param1, param2, callback) { 
  let result = param1 + param2
  // The things that take long time can be done here
  callback(result)
}
我想知道是否有什么方法可以阻止我使用Java


编辑:我删除了几个使问题更复杂的句子。

是的,用Java很容易。以上面的示例为例,您可以用Java编写它,如下所示:

public static void main(String[] args) {
  System.out.println(sumCalc(1,2));
}

private int sumCalc(int first, int second) {
  return first + second;
}

我可能对你的问题读得太多了,但你似乎在研究如何在Android中处理异步代码。有几个本机选项(不考虑任何库)。我将重点讨论两个,但请记住还有其他选择

异步任务 从

AsyncTask允许正确且轻松地使用UI线程。此类允许您在UI线程上执行后台操作和发布结果,而无需操纵线程和/或处理程序

在编写之前,您需要知道它将接收哪种类型的参数,它将在计算期间发布的进度类型,以及它的返回类型。这些类型是通过
AsyncTask
通用参数
AsyncTask
定义的。如果您不需要它们中的任何一个,请将它们设置为
Void

下面是使用
AsyncTask
计算两个
整数之和的基本要点:

public void sumCalculation (int param1, int param2, Callback callback) { 
    new AsyncTask<Integer, Void, Integer>() {

        @Override
        public Integer doInBackground(Integer... params) {
            int result = 0;
            for (Integer param : params) {
                result += param;
            }
            return result;                
        }

        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
            callback.onDone(integer);
        }

    }.execute(param1, param2);
}
如您所见,这需要解析
inputMessage.what
并决定如何处理它。此外,您需要将
inputMessage.obj
转换为正确的类型,以此类推


这仅仅是两个例子,但根据您试图做什么,您可能需要深入研究
服务
,或者查看一些反应式方法,例如
RxJava2
。然而,我鼓励你在深入研究更复杂的问题之前先从基础开始。

我真的不明白你的问题是什么。它是关于从
异步任务中获得结果的吗?或者如何组织代码?你能提供一些你想改进的代码示例吗?你正在为Android编写应用程序吗?因为AsyncTask不是Java SDK的一部分,它是特定于Android SDK的。在我看来它不像Java…@efkan你能确切地说明你想要完成什么,所以我们可以为你提供一个可能更好的解决方案。如果我在sumCalc中进行密集操作,如果我在方法中使用它,它工作正常吗?我猜这段代码不是拯救我避免重复我自己的正确方法。我们可以将它转换为“sync”方法吗?如果我将sumCalc方法声明为“synchronized”,那么当我从另一个方法调用它时,它是否同步工作?重复自己的想法、“异步代码”和“synchronized”方法是三个截然不同的概念。我想你有很多关于java的知识需要学习,在问太多问题之前阅读更多关于java的知识会对你有好处。我有一个问题,关于野餐,你介意吗@埃德森
  public class MyHandler {

        @Override
        public void handleMessage(Message inputMessage) {
            int messageType = inputMessage.what;
            Object extraData = inputMessage.obj;
            ...
        }
  }

  public class MyTask extends Thread {
       public static public int COMPUTATION_DONE = 0;
       private MyHandler handler;

       public MyTask(MyHandler handler) {
            this.handler = handler;
       }

        @Override
        public void run() {
            //do your computation
            Message message = handler.obtainMessage(COMPUTATION_DONE, your_result);
            handler.sendMessage(message);
        }
  }