2017-05-21 27 views
0

Enumはメモリリークの原因となるため、実行時に危険です。私はそうすることはできませんが、パラメータイムとしてモードを渡す必要がどこに続いて私のコード今外部クラスからIntDefのゲッタセッターを呼び出す

public class TestRec { 

@IntDef({Mode.DAY_MODE, Mode.NIGHT_MODE}) 
@Retention(RetentionPolicy.SOURCE) 
@interface Mode { 
    int DAY_MODE = 0; 
    int NIGHT_MODE = 1; 

} 

@Mode 
static int mCurrentMode = Mode.DAY_MODE; 



@Mode 
public static int getCurrentMode() { 
    return mCurrentMode; 
} 

public void setCurrentMode(@Mode int mCurrentMode) { 
    this.mCurrentMode = mCurrentMode; 
} 
} 

ですが、私は外部のクラスからsetCurrentModeしたいと思います。したがって、私は外部クラスからsetCurrentModeを呼び出すことができません。私は何が欠けていますか?

+0

でそれを呼び出し、 'this.mCurrentMode'ではなく' TestRec.mCurrentMode'と言うべきです。 – khelwood

答えて

1

mCurrentModeはインスタンスフィールドではなく静的フィールドなので、インスタンスメソッドをそのセッターとして持つことは意味がありません。また、thisがインスタンスになるため、this.mCurrentModeと参照するのは意味がありません。インスタンスフィールドではありません。

次のような静的メソッドとして、あなたのセッターを書くことができ:

public static void setCurrentMode(@Mode int mCurrentMode) { 
    TestRec.mCurrentMode = mCurrentMode; 
} 

と(それが静的フィールドのセッターだから) `setCurrentMode`は静的である必要があり

TestRect.setCurrentMode(whatever); 
関連する問題