2016-11-26 70 views
0

抱歉,關於錯誤的標題。無論如何我無法想出這個有趣的問題。初始化後變量變化未反映在界面

我有一個相當大的類正在進行,並且在那個類中我有一個接口(讓我們稱它爲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(); 
    } 
} 
+0

請發佈顯示確切問題的[mcve]。 (也'接口'是一個保留字) – CollinD

+1

你究竟是什麼意思?如果我通過集合,只是在初始化之前將foo設置爲randomFoo?無論你展示的是什麼,都可以按照你的預期工作。不熟悉Android - 「Log」部分正確設置了嗎? – Vineet

+0

'randomFoo'不是'static'。它應該由'someClass.randomFoo'而不是'SomeClass.randomFoo'訪問。否則,我在這裏沒有看到任何問題。具體問題是什麼? – CollinD

回答

0

問題原來,在父類中,我打電話someFoo通話.setFoo多次,將foo設置爲不同的MyInterfaces。我解決了這個問題,它工作得很好。