初始化后的变量未在接口

时间:2016-11-26 03:55:58

标签: java android interface

对不好的标题感到抱歉。无论如何,我真的无法想出这个有趣的问题。

我有一个相当大的类,在那个类中我有一个接口(让我们称之为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();
    }
}

1 个答案:

答案 0 :(得分:0)

问题证明,在父类中,我多次调用someFoo.setFoo,将foo设置为不同的MyInterfaces。我解决了这个问题,它运作得很好。