intent java android generics scope android-context

java - intent - No es accesible en el contexto actual



generics java (2)

Creación Dead Lock

Utiliza ModelAdapter.ModelViewHolder como el parámetro de plantilla de BaseAdapter , y deja que ModelAdapter amplíe BaseAdapter , luego el compilador intentó crear ModelViewHolder primero, pero la clase de ModelAdapter.ModelViewHolder (el tipo es Class ) aún no se ha creado. Debe esperar a que se cree el ModelViewHolder , porque ModelViewHolder está dentro del alcance de ModelAdapter .

La forma de resolverlo es poner la clase ModelViewHolder en un nuevo archivo * .java.

Tengo el siguiente código

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 } }

BaseAdapter y ModelAdapter están en archivos separados. El problema es que tengo un error de compilación cuando trato de definir el ModelAdapter: ModelViewHolder no es accesible en el contexto actual

Realmente no entiendo este error y no puedo entender lo que estoy haciendo mal. ¿Puede alguien explicarme este problema o un enlace que pueda aclarar esta situación?


Me pasó lo mismo cuando extendí una clase Base. Pero esta vez lo tuve así (siguiendo el ejemplo dado en la pregunta)

BaseAdapter.java

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 } }

ModelAdapter.java

import com.mypackage.ModelAdapter.ModelViewHolder; ***//NOTE THIS IMPORT!!!*** 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 } }

De esa forma, la advertencia desapareció y no es necesario separar ModelViewHolder en otro archivo ''.java''. Tenga en cuenta que están en dos archivos diferentes y la importación en ModelAdapter.java.

Creo que la respuesta de Fei Liang es parcialmente incorrecta porque ser ModelViewHolder estático debería permitir inicializar ModelViewHolder sin inicializar su clase padre ModelAdapter