¿Por qué no puedes lanzar directamente el tipo en java?
En el fragmento de código siguiente, ¿por qué las líneas 1 y 2 estarían bien y la línea 3 causaría un error de compilación? ¿No son las dos primeras líneas funcionalmente equivalentes a la tercera?
Loader loader = getLoaderManager().getLoader(0); PatientLoader patientLoader = (PatientLoader) loader; patientLoader = (PatientLoader) getLoaderManager().getLoader(0); // ERROR!
Lanza esto:
- ActiveAndroid Excepción SQLite 'No such table'
- Android 2.3 y google maps API v2
- Mezcla de vistas de Android y GLSurfaceView
- Android: CountDownTimer salta el último onTick ()!
- No es un error de clase incluido Android Studio
java: somepath/Patient.java:99: inconvertible types found : android.content.Loader<java.lang.Object> required: com.example.package.PatientLoader
PatientLoader
extiende indirectamente el Loader<>
.
Yo vengo de un fondo C # y en C # esto no sería un problema, así que tal vez estoy perdiendo algo sobre el sistema de tipo Java.
PatientLoader
extiende AsyncTaskLoader<Cursor>
. Y cualquier persona familiarizada con SDK de Android sabría que AsyncTaskLoader<>
extiende Loader<>
.
- Método de ContentValues no se burla
- Cifrado / descifrado de Android con AES
- ¿Cómo hacer un HTTPS POST de Android?
- Android findViewById en DialogFragment
- Obtener OnActivityResult al volver de startActivityForResult en Adapter
- Un botón de dos oyentes en java
- ¿Cómo obtener todos los nombres de tablas en la base de datos Android sqlite?
- Ionic - 'platform add android' El comando falló con el código de salida ENOENT
No tiene nada que ver con la colocación del paréntesis. Este problema tiene que ver con los genéricos:
Por ejemplo fallo de la compilación:
Loader<Object> loader = getLoaderManager().getLoader(0); PatientLoader ch = (PatientLoader)loader; // Will show compile error (Cannot cast from Loader<Object> to PatienLoader)
Pero esto compilará bien:
Loader<?> loader = getLoaderManager().getLoader(0); PatientLoader ch = (PatientLoader)loader; // Compiles fine.
La diferencia es la declaración genérica <Object> frente a la <?> Declaración genérica.
El problema es que getLoader (int) está definido para devolver un Loader <D>. Esto significa que 'getLoaderManager (). GetLoader ()' en la instrucción siguiente se interpreta como un Loader <Object> y no un Loader <?>.
PatientLoader ch = (PatientLoader)getLoaderManager().getLoader(0); // Compile error.
Creo que esto es un "error" en el SDK. El método getLoader (int) debería haber sido definido para devolver un Loader <?> Y no un Loader <D>.
- Adaptador personalizado para cajón de navegación
- Pop-up cuadro de diálogo de alerta de servicio en android