簡體   English   中英

Java動態定義變量類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM