1

是否可以:

1)我在某处定义了类似的东西:

private static enum MODE
{
    ANDROID,
    HOLO_EVERYWHERE
}

public static final MODE = MODE.ANDROID;

2)使用此定义并制作一些自定义代码,如下所示(或类似的,或只是其他方式,此代码只是演示我想要的示例......类似于#ifdefC......):

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。 ..

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

4

2 回答 2

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();
        }
    }
}

否则,您可以使用反射来解决这个问题。另请参阅:http ://docs.oracle.com/javase/tutorial/reflect/

于 2013-08-02T07:33:31.957 回答
0

您可以有 2 个活动(对于扩展 2 个不同类的单个活动)并且可以有条件地启动这些活动。

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

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

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

于 2013-08-02T07:26:13.747 回答