现在我有这个:
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);
}
但是现在我遇到了错误:
不可转换的类型;无法将“”强制转换为“ E”
和
不存在类型变量T的实例,因此List符合 AsyncTask
我生成错误的代码基于传递的lambda。有谁知道为什么将接口转换为类会导致问题?即使我注释掉shortcircuit
字段并且仅完成方法定义,也会出现相同的错误。
答案 0 :(得分:3)
您不能使用类代替接口(确切地说是功能接口)。
请参阅link,了解为什么我们需要功能接口才能在Java中使用lambda。
在您的情况下,您尝试使用一个类,该类显然具有 名字,不是。但是要使用lambda,我们必须使用匿名函数 没有名称和类型。
答案 1 :(得分:0)
我通过保留接口但也使用类来解决此问题:
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接口,在可以使用类的地方,请使用AsyncCallback类。