Java(Eclipse) - 条件编译

no9*_*no9 4 java eclipse android conditional-compilation java-me

我有一个java项目,在j2me项目和android项目中引用.在这个项目中,我想使用条件编译.

就像是...

//#if android
...
//#endif

//if j2me
...
//#endif
Run Code Online (Sandbox Code Playgroud)

我一直在读这个,但我还没有找到任何有用的东西.

sin*_*nek 8

您可以使用Antenna(Eclipse有一个插件,您可以将它与Ant构建系统一起使用).我正在以你描述的方式在我的项目中使用它,它完美地工作:)

编辑:这是与@ WhiteFang34解决方案相关的示例,这是一种方法:

在您的核心项目中:

//base class Base.java
public abstract class Base {
    public static Base getInstance() 
    {
        //#ifdef ANDROID
        return new AndroidBaseImpl();
        //#elif J2ME
        return new J2MEBaseImpl();
        //#endif
    }

    public abstract void doSomething();
}

//Android specific implementation AndroidBaseImpl.java
//#ifdef ANDROID
public class AndroidBaseImpl extends Base {
    public void doSomething() {
     //Android code
    }
}
//#endif

//J2ME specific implementation J2MEBaseImpl.java
//#ifdef J2ME
public class J2MEBaseImpl extends Base {
    public void doSomething() {
        // J2Me code
    }
}
//#endif
Run Code Online (Sandbox Code Playgroud)

在使用核心项目的项目中:

public class App {

    public void something {
        // Depends on the preprocessor symbol you used to build a project
        Base.getInstance().doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想为Android构建,你只需定义ANDROID预处理器符号或J2ME, 如果你想为J2ME平台构建一个...

无论如何,我希望它有帮助:)


Whi*_*g34 5

也许您应该考虑围绕特定于配置文件的逻辑创建接口(J2ME,Android或其他未来).然后为每个配置文件创建接口的具体实现.您可以将任何公共部分拆分为抽象基类,以便扩展两个实现.这样,每个配置文件的逻辑可以很好地分离,以适应不同的问题.对于每个配置文件,只需构建适当的类集(例如,您可以通过包将它们分开).从长远来看,维护,调试,测试和理解会更容易.