[英]Java define variable type on the fly
提供以下代碼段:
public boolean singleLine = true;
if (singleLine) {
String logLines;
} else {
List<String> logLines;
}
您如何執行上述操作,並將logLines保留在if / else語句之外的范圍內?
您不能同時(1)將其保留在范圍內和(2)將其保持為靜態類型。 您必須選擇一個。
為了將變量保持在范圍內,可以將其聲明為Object
類型。 這樣,您便可以為其分配任何類型。 不幸的是,這將丟失靜態類型,這意味着您必須進行強制轉換才能執行有意義的操作。
要使變量保持靜態類型,請將它們放在單獨的范圍內。
這兩種選擇都可能在您的情況下不起作用。 解決此問題的常用方法是構建一個公共接口 ,從后續代碼的角度來看,該接口 “統一”幾種類型的對象的行為。 您可以在不同分支中為此接口分配不同的實現,然后獲得統一的行為。
這是我的意思的一個小例子:
private void processSingle(String str) {
... // String-specific code
}
private void processList(List<String> strList) {
... // List-specific code
}
// Common interface
interface Wrapper {
void process();
}
// Using the common interface later on
...
Wrapper w;
if (singleLine) {
final String singleLineVal = ...
w = new Wrapper {
public void process() {
processSingle(singleLineVal);
}
};
} else {
final List<String> lst = ...
w = new Wrapper {
public void process() {
processList(lst);
}
};
}
// Now we can use the unified code:
w.process();
不要在if
語句中定義空變量引用。 也就是說,不要使用條件流來創建空引用。 在條件之外定義引用,然后使用該子句instantiate
它,或者完全刪除該子句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.