我面临一个棘手的问题。
我正在尝试创建一个回调管理器通用类,该类采用任何类型的接口的通用类。该计划是做这样的事情:

public interface LocationListener {
    void locationChanged();
    void providerChanged();
}

//The implementation declaration below is wrong...
public abstract class CallbackManager<T> implements T {
    //do something
}

public class MyCallbackManager extends CallbackManager<LocationListener> {

   @Override
   public void locationChanged() {

   }

   @Override
   public void providerChanged() {

   }
}

通常来说,我尽量避免像这样构建MyCallbackManager类:
public class MyCallbackManager extends CallbackManager<LocationListener> implements LocationListener {

   @Override
   public void locationChanged() {

   }

   @Override
   public void providerChanged() {

   }
}

有办法实现吗?
期待您的回复。

编辑

因为您要求对用例进行澄清。这是其背后的想法:
public abstract class CallbackManager<T>  {

    protected interface FunctionalInterface<T> {
        void run(T type);
    }

    protected ArrayList<WeakReference<T>> eventQueue = new ArrayList<>();

    protected void flush(@NonNull FunctionalInterface<T> functionalInterface) {
        for (int i = eventQueue.size() - 1; i >= 0; i--) {
            WeakReference<T> weakReference = eventQueue.get(i);
            T type = weakReference.get();
            if (type == null) {
                unregister(i);
            } else {
                functionalInterface.run(type);
            }
        }
    }
}

public class CallbackManagerLocation extends CallbackManager<LocationListener> implements LocationListener {

   @Override
   public void locationChanged() {
        flush((ll) -> ll.locationChanged());
   }

   @Override
   public void providerChanged() {
        flush((ll) -> ll.providerChanged());
   }
}

CallbackManagerLocation中实现的接口仅用于具有与CallbackManager中保留的接口完全相同的命名约定。

最佳答案

对不起,但这是不允许的。由此产生的问题数量将是巨大的。例如,假设您在CallbackManager中有一个函数public T locationChanged()。这将违反接口,而在CallbackManager类中不明显。还有更多这样的例子。

10-06 16:08