¿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:

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

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

  • GetAvailableBlocksLong () * getBlockSizeLong () VS getAvailableBytes ()
  • Saco de jabón de marco simple y cuerpo
  • Configuración de orientación múltiple - Android
  • Android java set image Recurso
  • Compruebe si un determinado objeto JSON está disponible o no
  • Error: Error al convertir bytecode a dex: Causa: no encontrado: Ljava / lang / Object;
  • Generar un Javadoc para mi proyecto de Android
  • Las sugerencias de auto de EditText están en blanco o no existen
  • Desea enviar datos de cadena hexadecimal en java
  • Analizar la página web con Jsoup. ¿Por qué el comportamiento en Android es diferente?
  • Donde usar StringBuffer / StringBuilder que String
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.