0

単純すぎるかもしれませんが、正しい方法を見つけることができませんでした。

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 エクストラを入れる必要がなくなったことはわかっています。これは、2 つの SpecialScreen サブクラスがあり、このパラメーターを使用して常に BASEScreen を呼び出す前に行った方法です。

4

2 に答える 2

2

正解です。C++ のような「デフォルト」構文はありません。コンストラクタで行う必要があります。セッターメソッドを使用する必要はありませんactivityCode。プライベートではなくプロテクトにすることができ、次のようにするだけです。

activityCode = ACTIVITY_1;

もう 1 つのオプションは、ビルダー パターンを使用してオブジェクトを構築することです。オブジェクトの構築を要求するときに (必要に応じて) オーバーライドするビルダー内の一連のデフォルトを使用します。

以下のコメントに応じて編集します。

そうでないときに「コンストラクター」と呼んでいたため、混乱を招いて申し訳ありません。

からBASEScreenへのアクセスを変更した場合protectedprivate

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 のどのクラスも、1 つ以上のコンストラクターを持つことができます。それぞれに、パラメーターを指定しないか、パラメーターのセットを渡すことができます (ただし、使用するパラメーターをコンパイラーが認識できるように、それぞれに固有のセット/順序が必要です)。

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

new を実行すると、それぞれが呼び出されます。次に例を示します。

BASEScreenヤマアラシ = new SpecialScreen(); // パラメーター コンストラクターはありません。

また

BASEScreenヤマアラシ = new SpecialScreen(5); // パラメータを取るコンストラクタ。

于 2011-04-22T17:37:41.883 に答える