2016-11-26 76 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。我解决了这个问题,它工作得很好。