我敢肯定這是一個非常愚蠢的問題,但我仍然想知道,是否可以動態地強制使用全局變量cause
,換句話說,不使用instanceof
運算符?Java鑄造(動態)
的原因的問題是,我覺得instanceof
運營商沒有做任何事情大在這裏,它只是鑄造cause
靜態,但在任何情況下,它是創造一個new IOException(cause)
因爲cause
是Object
類型,我不得不打字輸入String
或Throwable
。
private Object cause; // global variable
//...
if (failed)
throw cause instanceof String ? new IOException((String) cause) : new IOException((Throwable) cause);
下面是實際的代碼片段,其中兩個重寫的方法將被異步調用。
public class Command implements ResponseListener {
private Object cause;
// ...
@Override
public void messageReceived(String message, String status) {
// ...
if (!status.equals(MyConstants.COMPLD_MSG)) {
this.cause = status + " received for " + command.split(":")[0] + message;
this.failed = true;
}
doNotify();
}
@Override
public void exceptionCaught(Throwable cause) {
this.cause = cause;
this.failed = true;
doNotify();
}
public void waitForResponse(int cmdTimeout) throws IOException, InterruptedException {
// ...
if (failed)
throw cause instanceof String ? new IOException((String) cause) : new IOException((Throwable) cause);
}
}
的instanceof是definetelly不是鑄造。目前還不清楚你的問題是什麼,看起來像XY問題。請嘗試更具體。萬一你在想什麼XY問題是:http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – zubergu
我想你可以使用一些閱讀方法重載。這段代碼實際上有點合理,因爲不同的構造函數會根據'cause'的類型被調用。 –
「因爲原因是Object類型」。它是或**需要**是?你需要首先做出區分嗎? – zubergu