如何使用 class 而不是 lambda 参数的接口

How to use class instead of interface for lambda param

现在我有这个:

  public static interface AsyncCallback<T, E> {
    public void done(E e, T v);
  }

我想把它转换成这个,所以我在上面使用了一个布尔值 属性:

  public abstract static class AsyncCallback<T, E> {
    boolean shortcircuit = false;
    public abstract void done(E e, T v);
  }

但现在我收到错误:

Inconvertible types; cannot cast '' to 'E'

no instance(s) of type variable(s) T exist so that List conforms to AsyncTask

我拥有的生成错误的代码是基于传递 lambda 的。有谁知道为什么将接口转换为 class 会导致问题?即使我注释掉 shortcircuit 字段并且只有 done 方法定义,也会出现同样的错误。

您不能使用 class 而不是接口(准确地说 功能接口 )。

查看 了解为什么我们需要函数式接口来使用 java 中的 lambda。

In your case you are trying to use a class , which will obviously have name, isn't. but to use lambda we have to use anonymous functions which don't have name and type.

我通过保留界面但也使用 class:

解决了这个问题
  public static interface AsyncTask<T, E> {
    public void run(AsyncCallback<T, E> cb);
  }

  public static interface IAsyncCallback<T, E> {
    public void done(E e, T v);
  }

  public static abstract class AsyncCallback<T, E> implements IAsyncCallback<T, E> {
    public boolean shortcircuit = false;
  }

在必须使用接口的情况下,我使用 IAsyncCallback 接口,在这里我可以使用 class,我使用 AsyncCallback class.