Java:
public class JavaClass implements ModelController.Callback {
@Override
public void onModelsLoaded(@NonNull List<? extends Model> models) {
doSomething(models);
}
private void doSomething(List<Model> models) { }
}
Kotlin:
class ModelController {
var callback = WeakReference<Callback>(null)
interface Callback {
fun onModelsLoaded(models: List<Model>)
}
fun someFunction() {
callback.get().onModelsLoaded(ArrayList<Model>())
}
}
interface Model {
}
在Java的onModelsLoaded方法中,如果没有使用? extends Model,那么重载方法与Kotlin接口不匹配。但是如果使用它,将会得到以下错误:
doSomething(<java.util.List<com.yada.Model>) cannot be applied to (java.util.List<capture<? extends com.yada.Model>>)
为什么需要通配符捕获,为什么不能在非通配符方法中使用它?