对不好的标题感到抱歉。无论如何,我真的无法想出这个有趣的问题。
我有一个相当大的类,在那个类中我有一个接口(让我们称之为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 :(得分:0)
问题证明,在父类中,我多次调用someFoo.setFoo,将foo设置为不同的MyInterfaces。我解决了这个问题,它运作得很好。