2016-11-26 14 views
0

悪いタイトルは残念です。とにかく、この面白い問題を言葉で考えることは本当にできません。初期化後に変数が変更され、インターフェイスに反映されません

私はかなり大規模なクラスがあり、そのクラスでは私はインターフェイスを持っています(fooと呼ぶことができます)。

fooは、クラスの初期化が完了した後にユーザーによって設定されます。 (すなわちsomeClass.setFoo(randomInterface)。クラスの上部に

私はこの正確な理由のために、いくつかの既成のインターフェースを有し、ユーザが特定のインスタンスのための1つを選択します。上記の例を使用することができます。

私someClass.setFooで

私はそれで呼び出しを持つことになります。この

public final void setFoo(MyInterface interface){ 
    foo = interface; 
} 

とMyInterfaceインタフェースのようなものがあるでしょう、と言うexecuteFoo。最後に

interface MyInterface{ 
    void executeFoo(); 
} 

私は私のrandomFooインターフェイスを持っています。

MyInterface randomFoo = new MyInterface(){ 
    @Override 
    void executeFoo(){ 
     Log.d("Some Stuff here?","Maybe?"); 
    } 
} 

私の問題は、私は(ユーザーが正しくインターフェイスを設定した後、彼らが持っている。このために仮定)以降のMyInterface.executeFoo()メソッドを呼び出したとき、私はこのログポップアップを見ることはないです。

私は人生のために理由を理解することはできません。ビルド(アンドロイドスタジオ)をきれいにしてアンインストールしてからやり直し、まだ何も得られません。

私はセットを渡してfooを初期化する前にrandomFooに設定するだけでうまくいきます。

私はこれがなぜ機能していないのか、私がjavaについて何か誤解しているのか混同していると思います。

以下は、私が扱っているクラスの概要です(上記の例を使用してください)。

これまでの私の親クラスで

、そう

// ... other parent stuff 
SomeClass someClass = new SomeClass(); 
someClass.setFoo(SomeClass.randomFoo); 
someClass.executeFoo(); 
// ... some random parent stuff after 

ように書きコール工ass

public class SomeClass{ 
    public final static MyInterface randomFoo = new MyInterface(){ 
     @Override 
     public void executeFoo(){ 
      Log.d("Some Stuff here?","Maybe?"); 
     } 
    }; 

    public final static MyInterface randomFoo1 = new MyInterface(){ 
     @Override 
     public void executeFoo(){ 
      Log.d("RandomFoo1","RandomFoo1"); 
     } 
    }; 

    private MyInterface foo; 

    public SomeClass(){ 
     init(); 
    } 

    private final void init(){ 
    // This does nothing of relevance here 
    } 

    public final void setFoo(MyInterface newFoo){ 
     foo = newFoo; 
    } 

    public final void executeFoo(){ 
     foo.executeFoo(); 
    } 

    interface MyInterface{ 
     void executeFoo(); 
    } 
} 
+0

正確な問題を表示する[mcve]を投稿してください。 (また、 'interface'は予約語です) – CollinD

+1

「もし私がセットを渡して、fooを初期化の前にrandomFooに設定すれば」ということはどういう意味ですか?あなたが何を見せても、期待どおりに動作します。 Androidには慣れていないので、 'Log'パーツは正しく設定されていますか? – Vineet

+0

'randomFoo'は' static'ではありません。 'someClass.randomFoo'ではなく' someClass.randomFoo'によってアクセスされるべきです。そうでなければ、私はここに何の問題も見ません。具体的な問題は何ですか? – CollinD

答えて

0

問題は、親クラスでは、私はsomeFooを呼んでいたことが判明があると仮定すると、 .setFooを複数回実行し、fooを別々のMyInterfacesに設定します。私はそれを修正し、それはうまく動作します。

関連する問題