悪いタイトルは残念です。とにかく、この面白い問題を言葉で考えることは本当にできません。初期化後に変数が変更され、インターフェイスに反映されません
私はかなり大規模なクラスがあり、そのクラスでは私はインターフェイスを持っています(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();
}
}
正確な問題を表示する[mcve]を投稿してください。 (また、 'interface'は予約語です) – CollinD
「もし私がセットを渡して、fooを初期化の前にrandomFooに設定すれば」ということはどういう意味ですか?あなたが何を見せても、期待どおりに動作します。 Androidには慣れていないので、 'Log'パーツは正しく設定されていますか? – Vineet
'randomFoo'は' static'ではありません。 'someClass.randomFoo'ではなく' someClass.randomFoo'によってアクセスされるべきです。そうでなければ、私はここに何の問題も見ません。具体的な問題は何ですか? – CollinD