如何通过反射实现抽象类



我有一个私有抽象类作为监听器。我只能通过反射来访问它。我该如何实现该类?

public class A {
    private abstract class OnWorkListener {
        public abstract void onWork(int param);
    }
    private OnWorkListener mListener;
    public A(OnWorkListener listener) {
        mListener = listener;
    }
    public void work() {
        // some working
        if(mListener != null) {
            mListener.onWork(0);
        }
    }
}

public class B {
    private static final String TAG = B.class.getSimpleName();
    public B() {
                //How to overwrite it?
        WorkListener listener = new WorkListener() {
            public void onWork(int what) {
                Log.d(TAG, "onWork "+what);
            }
        };
        A a = new A(listener);
        a.work();
    }
}

问题是我无法创建抽象类的实例。我需要先实施它。但我找不到答案。

没有办法用反射来实现类或接口——在某种意义上,反射是"只读的",可以让您检查和操作已经存在的内容。

您需要发出Java代码,以便在运行时构建实现。有几个选项可供选择——看看这个答案,找到一些非常好的参考资料。

实际上有两个错误:-A.WorkListener在B中不可见(因为它是私有的)-A.WorkListener需要一个A的"封闭实例"(因为它不是静态的)

由于A的构造函数是公共的,因此将WorkListener声明为公共也是有意义的。(但如果A和B在同一个包中,包可见性也会起作用)。

公共A类{

    public abstract class WorkListener {
        public abstract void onWork(int param);
    }
...
}

您正试图在类B中实现一个位于类a中的私有类。类B根本看不到该类,这就像试图从类外部访问私有属性一样。

如果你的问题涉及到实现以及为什么B看不到它,只需重构类A并执行"从内部到外部级别",这意味着让你的私有类成为像A或B一样的类,。另一种选择是公开。

相关内容

  • 没有找到相关文章