在当前情况下无法访问

Cip*_*ion 23 java generics android scope android-context

我有以下代码

public abstract class BaseAdapter<T, V extends BaseAdapter.ViewHolder> extends ArrayAdapter<T> {
    public BaseAdapter(Context context, int resource, Collection<T> collection) {
        // typical constructor logic
    }

    // some other custom defined methods

    public static class ViewHolder {
        // custom defined logic
    }
}

public class ModelAdapter extends BaseAdapter<Model, ModelAdapter.ModelViewHolder> {
    public ModelAdapter(Context context, int resource, Collection<Model> collection) {
       super(context, resource, collection);
       // typical constructor logic
    }

    public static class ModelViewHolder extends ViewHolder {
        // custom defined logic
    }
}
Run Code Online (Sandbox Code Playgroud)

BaseAdapter和ModelAdapter位于单独的文件中.问题是我在尝试定义ModelAdapter时遇到编译错误:在当前上下文中无法访问 ModelViewHolder

我真的不明白这个错误,也无法弄清楚我做错了什么.有人可以向我解释这个问题或可能澄清这种情况的链接吗?

Fei*_*ang 41

创造死锁

ModelAdapter.ModelViewHolder用作模板参数BaseAdapter,然后让我们ModelAdapter扩展BaseAdapter,然后编译器ModelViewHolder首先尝试创建,但是ModelAdapter.ModelViewHolder类型(类型是Class)尚未创建.它必须等待ModelAdapter创建,因为ModelViewHolder它在范围内ModelAdapter.

解决它的方法是将ModelViewHolder类放入一个新的*.java文件中.

  • 我仍然不明白这一点......难道不应该让 ModelViewHolder 静态解决这个问题吗?静态修饰符应该使该类可以在不初始化父类的情况下进行初始化...... (2认同)