Java动态定义变量类型

时间:2015-02-19 20:24:36

标签: java

提供以下代码段:

  public boolean singleLine = true;
  if (singleLine) {
    String logLines;
  } else {
    List<String> logLines;
  }

如何执行上述操作并将logLines保留在if / else语句之外的范围内?

2 个答案:

答案 0 :(得分:7)

你不能同时(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();

答案 1 :(得分:2)

不要在if语句中定义空变量引用。也就是说,不要使用条件流来创建空引用。在条件之外定义引用然后使用子句instantiate,或者只删除该条款。