【发布时间】:2013-04-17 05:24:38
【问题描述】:
谁能告诉我如何控制 java 的执行顺序,同时仍以简化、易于维护的结构组织代码?
我正在用 java 编写一个相当复杂的算法。一种方法长达数百行,以至于为了微调算法而隔离代码的关键部分变得过于劳动密集。为了简化代码,我确定了可以解析为单个变量的代码的每个部分,并将这些部分中的每个部分移到它们自己的方法中,然后从以前复杂的方法中调用这些方法。这很好,因为它使代码可读,并且更容易维护。
问题是现在我收到一些错误,表明调用方法在一些早期方法返回它们的值之前继续执行后续代码。
下面是代码示例:
void myMethod(Double numb){
double first = new getFirst(numb);
double second = new getSecond(numb);
double third = new getThird(numb);
double anAside = new getAnAside(first, second, third);
double fourth = new getFourth(numb);
}
出现的错误消息与getFourth(numb) 中发生的事情有关,同时我得到System.out.println() 导致Eclipse 控制台表明getFirst(numb) 仍在运行。当我在myMethod(numb) 中拥有getFirst(numb)、getSecond(numb)、getThird(numb)、getAnAside(first,second,third) 和getFourth(numb) 的所有内容时,我没有得到相同的证据表明代码块出现故障。 (因为它们没有子方法,所以代码都在一个长块中。)但是,代码很难阅读。如何对上面的myMethod(numb) 进行更改,以便在继续下一个方法之前必须完全返回每个方法,这样我仍然可以拥有易于阅读的代码?
【问题讨论】:
-
"表示调用方法在一些较早的方法返回它们的值之前继续执行后续代码" 假设您有一个线程运行此代码,这是不可能的。您的日志记录可能有问题,或者您可能同时调用了
getFourth和 getFirst` 使用的方法,但在日志中仅标识为fourth? -
这有点猜测,但我知道 IDE 会以错误的顺序显示 stdout 输出。我建议您首先消除这种情况(即使不太可能),方法是从适当的终端运行 Java 或将日志写入磁盘。
-
你为什么关心他们的运行顺序?
-
您可能需要修饰符
volatile?如果你有并行方法访问变量,这些变量往往会不断变化,并且编译器试图优化,它可能会抛出错误,(我认为)。 -
"如果看起来复杂,那就复杂了。如果复杂,那就错了。"
标签: java eclipse performance algorithm architecture