У меня есть частный абстрактный класс в качестве слушателя. Я могу получить к нему доступ только на размышления. Как реализовать этот класс?Как реализовать абстрактный класс через отражение
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();
}
}
Проблема в том, что я не могу создать экземпляр абстрактного класса. Мне нужно сначала его реализовать. Но я не могу найти ответа.
То, что вы делаете, кажется мне прекрасным. В чем проблема? –
Вы не сможете реализовать 'OnWorkListener' из любого места вне класса A, поскольку он является приватным. –
Если вы создали интерфейс, вы можете использовать 'Proxy'. Тем не менее, я вообще предлагаю не использовать рефлексию вообще. (Или 'int' для вещей, которые ясны, а не числа.) –