0

可能太简单了,但我找不到正确的方法。

在 C++ 中,我可以编写initWithParameter: xxx实例化一个类,然后在 init 中设置一些实例变量,给定 init 时的值。

在Java中我不知道该怎么做。目前我执行以下操作:

public class SpecialScreen extends BASEScreen{
private static final int ACTIVITY_1 = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); //create the instance
    defineScreenType (ACTIVITY_1); //second call to set the instance variable
    presentOnScreen();
}

在 BASEScreen 中时:

public class BASEScreen extends Activity {
private Integer activityCode; // which activity should I do?

@Override
public void onCreate(Bundle savedInstanceState) {  // the creation
    super.onCreate(savedInstanceState);
}

// the setting of the instance variable
public void defineScreenType(int screenID) {
    activityCode = screenID;

}

这不可能是最好的方法。如何更好地做到这一点?

谢谢

添加以显示在 BASEScreen 中调用 SpecialScreen:

    @Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    Intent i;
    switch (item.getItemId()) {
    case OTHER_PAGE_ID:
        // 
        if (activityCode == ACTIVITY_1) {
            i = new Intent(this, SpecialScreen2.class);
            i.putExtra("Task", ACTIVITY_2);
            startActivityForResult(i, ACTIVITY_2);
            finish();

        } else {
            i = new Intent(this, SpecialScreen1.class);
            i.putExtra("Task", ACTIVITY_1);
            startActivityForResult(i, ACTIVITY_1);
            finish();
        }

        return true;

ps 我知道不再需要放置 Extra 了。这是我在拥有两个 SpecialScreen 子类并始终使用此参数调用 BASEScreen 之前的方式。

4

2 回答 2

2

正确,没有像 C++ 中的“默认”语法。您必须在构造函数中执行此操作。请注意,您不需要使用 setter 方法,您可以将其设为activityCode受保护而不是私有,然后执行以下操作:

activityCode = ACTIVITY_1;

另一个选项是使用构建器模式来构建您的对象,使用构建器内的一组默认值,您在请求构建对象时覆盖(当需要时)这些默认值。

编辑以回应以下评论:

我为一些混乱道歉,因为我称它为“构造函数”,而实际上它不是。

如果BASEScreen您将访问权限更改为protectedfromprivate

public class BASEScreen extends Activity {
    protected Integer activityCode;

然后,您可以在SpecialScreen子类中访问它:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activityCode = 1; // Or ACTIVITY_1 if you'd like
    presentOnScreen();
}
于 2011-04-22T17:35:40.857 回答
2

如果我正确理解你的问题。Java 中的任何类都可以有一个或多个构造函数。每个都可以没有参数或您传入的某些参数集(尽管它们必须每个都具有唯一的集/顺序,以便编译器可以判断您打算使用哪个参数)。

public class SpecialScreen extends BASEScreen {
    private static final int ACTIVITY_1 = 1;

    // There is a default constructor with no parameters provided for you
    // by default if you don't define any constructors.
    public SpecialScreen() {
       // I'm overriding the default constructor and this one will do 
       // something else.
       super(ACTIVITY_1);
    }

    // But you can also have ones like this.
    public SpecialScreen(int activity) {
       super(activity);
    }
}

当你执行一个新的时,每个都会被调用,例如:

BASEScreen porcupine = new SpecialScreen(); // 无参数构造函数。

或者

BASEScreen porcupine = new SpecialScreen(5); // 接受参数的构造函数。

于 2011-04-22T17:37:41.883 回答