抱歉,關於錯誤的標題。無論如何我無法想出這個有趣的問題。初始化後變量變化未反映在界面
我有一個相當大的類正在進行,並且在那個類中我有一個接口(讓我們稱它爲foo)。
foo由用戶在完成初始化後設置。 (即someClass.setFoo(randomInterface)。
在類的頂部我有此確切原因幾個預製接口,並且用戶會選擇一個用於特定實例。現在讓我們使用上述示例。
在我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()方法後(用戶已經正確設置界面後,承擔了這個份上,他們有),我從來沒有看到這篇日誌彈出。
我不能爲了我的生活弄清楚爲什麼,我已經去清理構建(android studio),卸載它並重新開始,仍然沒有得到任何東西。
如果我通過集合,並且在初始化之前將foo設置爲randomFoo,那麼它工作得很好。
所以我想我很困惑,爲什麼這不起作用,如果我只是誤解了一些關於Java的東西。
下面是我正在使用的類的簡要概述(使用上述示例)。
在我父類此,假定有是去像這樣
// ... other parent stuff
SomeClass someClass = new SomeClass();
someClass.setFoo(SomeClass.randomFoo);
someClass.executeFoo();
// ... some random parent stuff after
的SomeClass的
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]。 (也'接口'是一個保留字) – CollinD
你究竟是什麼意思?如果我通過集合,只是在初始化之前將foo設置爲randomFoo?無論你展示的是什麼,都可以按照你的預期工作。不熟悉Android - 「Log」部分正確設置了嗎? – Vineet
'randomFoo'不是'static'。它應該由'someClass.randomFoo'而不是'SomeClass.randomFoo'訪問。否則,我在這裏沒有看到任何問題。具體問題是什麼? – CollinD