我只是想问一下,是否有可能检查一个无效方法"取消"本人通过致电return;
?
例如,在我的主要部分,我致电calculate(myArray);
,其定义如下:
public static void calculate(Object[] array) {
if (array == null)
return;
// do stuff
}
他们是否有办法知道,如果它回来了?我的想法是制作一个全球性的" boolean在我们返回之前更改为true,然后在main中检查它的值,或者只是将返回类型更改为类似于int的类型,当它在开头返回时我们使用return -1;
并在方法的末尾{{ 1}}
两者都有可能,但我认为它们都不是很好的风格。还有其他选择吗?
答案 0 :(得分:5)
你说的是你所描述的做法在Java(和其他现代语言)中被认为是坏的。
您的方案最常见的可接受做法是:
bool
表示成功或失败。如果在正常情况下也可能发生“失败”代码路径,请执行此操作。答案 1 :(得分:3)
声明为
void
的任何方法都不会返回值。它不需要包含return
语句,但它可以这样做。在这种情况下,return
语句可以用于分支出控制流程块并退出方法,并且只是像这样使用:return;
无法通过方法调用来确定void
方法是否由落空块或return;
语句完成。
大多数其他方法包含返回类型boolean
,并在出现问题时返回false
,或者只是抛出IllegalArgumentException
。
答案 2 :(得分:3)
您可以使用发布商 - 监听器模式:)
import java.awt.event.ActionListener;
import java.util.LinkedList;
import java.util.List;
public class Sample {
private interface Event {
}
private static class ExitEvent implements Event {
}
private static class SucceedEvent implements Event {
}
private interface EventListener {
void eventPerformed(Event e);
}
private static List<EventListener> listeners = new LinkedList<EventListener>();
private static void addActionListener(EventListener l) {
listeners.add(l);
}
private static void fireEvent(Event event) {
for (EventListener l : listeners) {
l.eventPerformed(event);
}
}
public static void calculate(Object[] array) {
if (array == null) {
fireEvent(new ExitEvent());
return;
}
fireEvent(new SucceedEvent());
}
public static void main(String[] args) {
addActionListener(new EventListener() {
public void eventPerformed(Event e) {
if (e instanceof ExitEvent) {
System.out.println("Exit");
} else if (e instanceof SucceedEvent) {
System.out.println("Success");
}
}
});
calculate(null);
calculate(new Object[] {});
}
}
输出:
Exit
Success
你可以通过利用访客模式
进一步去除那些丑陋的ifsimport java.util.LinkedList;
import java.util.List;
public class Sample {
private interface EventVisitor {
void visit(ExitEvent event);
void visit(SucceedEvent event);
}
private interface Event {
void accept(EventVisitor visitor);
}
private static class ExitEvent implements Event {
public void accept(EventVisitor visitor) {
visitor.visit(this);
}
}
private static class SucceedEvent implements Event {
public void accept(EventVisitor visitor) {
visitor.visit(this);
}
}
private interface EventListener {
void eventPerformed(Event e);
}
private static List<EventListener> listeners = new LinkedList<EventListener>();
private static void addActionListener(EventListener l) {
listeners.add(l);
}
private static void fireEvent(Event event) {
for (EventListener l : listeners) {
l.eventPerformed(event);
}
}
public static void calculate(Object[] array) {
if (array == null) {
fireEvent(new ExitEvent());
return;
}
fireEvent(new SucceedEvent());
}
public static void main(String[] args) {
addActionListener(new EventListener() {
public void eventPerformed(Event e) {
e.accept(new EventVisitor() {
public void visit(SucceedEvent event) {
System.out.println("Success");
}
public void visit(ExitEvent event) {
System.out.println("Exit");
}
});
}
});
calculate(null);
calculate(new Object[] {});
}
}
输出:
Exit
Success