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

在C ++中,我可以编写initWithParameter: xxx来实例化一个类,然后在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之前所做的方式。

最佳答案

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

activityCode = ACTIVITY_1;


另一种选择是使用“构建器模式”来构建您的对象,并在请求构建对象时在需要时覆盖的构建器中使用一组默认值(在需要时)。

根据以下评论进行编辑:

我为它不是一个“构造函数”而感到困惑表示歉意。

如果在BASEScreen中,将访问权限从protected更改为private

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

09-28 06:38