No se puede resolver el método de tailMap TreeMap

Egor Erofeev:

¿Por qué TreeMapel tipo Mapno define los métodos tailMapo headMap.

Map<String, String> map = new TreeMap<>();
map.tailMap();  //cannot resolve method tailMap

Con conversión explícita funciona:

((TreeMap<String, String>) map).tailMap("a");

Con NavigableMaptodo está bien:

NavigableMap<String, String> map1 = new TreeMap<>();
map1.tailMap("a");

Si estoy en lo correcto que se debe a la interfaz Mapque carecen de métodos correspondientes, a pesar de la cara que el objeto mapes la aplicación concreta de la clase TreeMapque sin duda sí posee los dichos métodos.

Sólo en busca de una explicación más detallada.

¡Gracias!

user10367961:

El objeto de tipo TreeMaptiene el método tailMap, pero se hace referencia a ella a través de una referencia de tipo Map, que no exponga al tailMapmétodo en sí. Es por ello que el compilador se queja.

Tenga en cuenta que Java es de tipo estático . Esto significa que las necesidades del compilador para asegurarse de que en tiempo de compilación que hay un método a llamar independientemente de la implementación real.

Puesto que usted podría tener una Mapaplicación que no define el tailMapmétodo, el compilador no le permitirá invocar el tailMapmétodo en un objeto referenciado por medio Map.

Dado que la NavigableMapinterfaz define el método tailMap, que son capaces de invocar el método en cualquier objeto referenciado vía NavigableMap. Esto también se aplica si se utiliza TreeMapcomo tipo de referencia, ya que TreeMaplos implementos NavigableMap. Es por esto que el compilador no se queja en sus ejemplos segundo y tercero (la conversión explícita y la NavigableMapDeclaración de la referencia).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=136652&siteId=1
Recomendado
Clasificación