是否可以进行条件包含和条件函数调用?

时间:2013-08-02 07:21:26

标签: java android

以下是可能的:

1)在某处我定义了类似的内容:

private static enum MODE
{
    ANDROID,
    HOLO_EVERYWHERE
}

public static final MODE = MODE.ANDROID;

2)使用这个定义并制作一些CUSTOM代码,如下面的(或者类似的,或者只是其他方式,这个代码只是一个例子来展示我想要的......像C中的#ifdef ... 。):

if (MODE == MODE.ANDROID)
    include android.app.Activity as ACTIVITY;
else
    include com.WazaBe.HoloEverywhere.sherlock.SActivity as ACTIIVTIY;
public ExtendedActivity extends ACTIVITY
{
    public ExtendedActivity()
    {
        if (MODE == MODE.ANDROID)
            this.callFunction1();
        else
            this.callFunction2();
    }
}

编辑

我的目标是:

我不想包装这两个类,因为我希望我的库在没有安装其他库(如HoloEverywhere库)的情况下工作...我不希望我的库的用户改变我的代码或包含HoloLibrary ......

我希望他能够设置使用哪个基类,就是这样......

2 个答案:

答案 0 :(得分:2)

是的,可以这样做,但不能在班级成员之外。 但是不可能投一个扩展的类1.在它之外,2。在运行程序之前必须注册类成员,而这是不可能的。

public ExtendedActivity extends ACTIVITY
{
    public ExtendedActivity()
    {
        if (MODE == MODE.ANDROID) {
            include android.app.Activity;
            this.callFunction1();
        }
        else {
            include com.WazaBe.HoloEverywhere.sherlock.SActivity;
            this.callFunction2();
        }
    }
}

否则你可以使用Reflections来解决这个问题。 另见:http://docs.oracle.com/javase/tutorial/reflect/

答案 1 :(得分:0)

您可以进行2项活动(针对单个活动扩展2个不同的类别),并可以有条件地启动这些活动。

if (MODE == MODE.ANDROID)
    startActivity(A)
else
    startActivity(B)

但你的发射器活动必须是一个,不能以这种方式设计。

我想知道你为什么要这样做?

相关问题