我想知道我可以做些什麼來使這更可讀和乾淨。通過閱讀,我的意思是更容易閱讀其他開發人員。我怎樣才能使這更可讀和更清潔?
我真的不想有兩次相同的代碼。我想,我可以做一些方法或方法,從而使它更短,但我不能完全確定......
@Override
public void dispatchEvent(Event event) {
checkNotNull(event);
CancellableEvent cancellableEvent = null;
boolean cancellable;
if (cancellable = event instanceof CancellableEvent) {
cancellableEvent = (CancellableEvent) event;
checkArgument(cancellableEvent.isCancelled());
}
// Ignore-cancellation event handlers will run
for (EventPriority priority : EventPriority.values()) {
Map<Method, EventListener> internalMapping = getRegistry().getMethodMap(event.getClass(), priority, true);
if (internalMapping != null) {
for (Entry<Method, EventListener> entry : internalMapping.entrySet()) {
try {
entry.getKey().invoke(entry.getValue(), event);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
/*
* Delegate any exceptions that occur from
* the method to a runtime exception.
*/
throw new RuntimeException(e);
}
}
}
}
// Event handlers that consider cancellation will run
for (EventPriority priority : EventPriority.values()) {
Map<Method, EventListener> internalMapping = getRegistry().getMethodMap(event.getClass(), priority, false);
if (internalMapping != null) {
for (Entry<Method, EventListener> entry : internalMapping.entrySet()) {
try {
entry.getKey().invoke(entry.getValue(), event);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
/*
* Delegate any exceptions that occur from
* the method to a runtime exception.
*/
throw new RuntimeException(e);
}
// Immediately return in the case of the event being cancelled.
if (cancellable && cancellableEvent.isCancelled()) {
return;
}
}
}
}
}
一開始,你可以替換一個多抓,像多個catch語句:'趕上(拋出:IllegalArgumentException | IllegalAccessException E)' 。注意或使用按位包含而不是邏輯或。 – MrLore
您可以將try/catch重構爲另一個方法'invokeEntry(Entry entry)',並從兩個for循環中調用它。 –
jalynn2
你不應該真的在真實代碼 –