忽略java4中的变量声明

时间:2014-02-27 18:52:53

标签: java

我有一个必须在java4和java5中支持的应用程序。如果是java 5执行环境,我想添加更多功能。

public class Test
{
    private ScheduledExecutorService scheduler;
    private ScheduledFuture<?> scheduledFuture;

    private boolean java4ExecEnv;

    public Test()
    {
        in the manifest.mf file I have something like Bundle-RequiredExecutionEnvironment, using this i am setting java4ExecEnv
        java4ExecEnv = true/false;
    }

    method1()
    {
        if(!java4ExecEnv)
            scheduledFuture = scheduler....
    }

    method2()
    {
        if(!java4ExecEnv)
            scheduledFuture....
    }
}

在method1和method2中,如果它是java4版本,我可以避免调用scheduler和scheduledFuture。但是,如果执行环境是java4,有没有办法避免实例变量声明(scheduler,scheduledFuture)。

或者我应该寻找java4和5中支持的替代方案。

2 个答案:

答案 0 :(得分:0)

  

如果是java 5执行环境,我想添加更多功能

Java 5和Java 1.4具有不同的API。虽然大多数都有相似之处,但如果您计划定位特定版本,则必须在编译时完成,而不是在代码本身中完成。您可以使用System.getProperty来获取版本,但Java不像带有条件#define的C / C ++。因此,如果代码是在更高的JRE上编译的,那么它就不会在较低的JRE上运行。

答案 1 :(得分:0)

以下是一些将在Java 1.4和Java 5上运行的演示代码:

import java.util.concurrent.*;

public class Demo implements Runnable {
  public void run() { System.out.println("Executing"); }

  public static interface Runner { void run(Runnable r); }

  private static class Runner4 implements Runner {
    public void run(Runnable r) {
      System.out.println("Java 1.4");
      new Thread(r).start();
    }
  }

  private static class Runner5 implements Runner {
    ExecutorService executor = Executors.newCachedThreadPool();

    public void run(Runnable r) {
      System.out.println("Java 5");
      executor.submit(r);
    }
  }

  public static Runner loadRunner() {
    try {
      Demo.class.forName("java.util.concurrent.ExecutorService");
      return new Runner5();
    } catch (ClassNotFoundException e) {
      return new Runner4();
    }
  }

  public static void main(String[] args) { loadRunner().run(new Demo()); }
}

此代码必须使用Java 5或更高版本编译,版本为target 1.4。它检查 ExecutorService 类型的类路径,如果不存在则返回替代方案。

如果这是一个非常重要的项目,我会将Java 5依赖代码转换为某种可选插件,并针对Java 1.4运行时库编译大量代码。