抱歉,关于错误的标题。无论如何我无法想出这个有趣的问题。初始化后变量变化未反映在界面
我有一个相当大的类正在进行,并且在那个类中我有一个接口(让我们称它为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