具有实现自己泛型参数的泛型参数的 Java 抽象类

标签 java class generics interface abstract

我遇到了一个棘手的问题。 我正在尝试创建一个回调管理器泛型类,它采用任何类型接口(interface)的泛型。计划是,做这样的事情:

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 中实现的接口(interface)仅用于具有与 CallbackManager 中保留的接口(interface)完全相同的命名约定。

最佳答案

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

关于具有实现自己泛型参数的泛型参数的 Java 抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42905219/

相关文章:

java - 使用正则表达式屏蔽电子邮件地址和域

Python 创建类的多个实例

java - 如何用java下载并解析sql文件

java - 需要帮助解决旋转图像问题

c++ - 要在新类中使用另一个类,我应该继承吗?

java - 业务、系统、接口(interface)、持久性类是什么意思?

c# - 通用方法和转换 : how to define that Type 1 is convertible to Type 2

java - 什么是原始类型,为什么我们不应该使用它呢?

c# - 编写一个不是容器的泛型类? [C#]

java - 尝试保存 10 位数字电话号码,但抛出无效 int 错误