java - saber - JDK 7 clase de compatibilidad con versiones anteriores con JDK 6
java version 6 (2)
Qué características de JDK 7 (excluyendo invokedynamic porque java no lo usa) causando una nueva versión de archivo de clase que no cumple con JDK 6. Parece que todas las funciones podrían implementarse mediante el compilador que genera códigos de pegamento. Por ejemplo, la cadena en la instrucción switch podría implementarse utilizando repetidas instrucciones ifeq generadas por el compilador. Quiero poder asignar banderas de -source 1.7 -target 1.6 al compilador para que sea compatible con jre 6 y al mismo tiempo usar las características de la moneda del proyecto en jdk 7.
Así que déjame asegurarme de que entiendo esto. ¿Desea ejecutar una clase específica en su aplicación contra un JRE diferente y luego todas sus otras clases? Supongo que esto podría ser teóricamente posible si en cada uso de la clase, si no quiere usar una versión diferente, gire una JVM por separado. Esto implicaría un nivel de complejidad equivalente a pasar información entre dos JVM en aplicaciones separadas. Fuera de la caja, no funciona de esta manera porque el entorno de ejecución en 6 no conocería las características de la moneda del proyecto. IIRC no puedes usar genéricos en un tiempo de ejecución de 1.4, entonces, ¿en qué se diferencia esto? Al final del día, realmente no parece que valga la pena, entonces, de nuevo, tal vez perdí el punto por completo.
No he leído el código del compilador, pero algunas de las nuevas características obviamente deben tener un impacto en el código de bytes.
La "invocación del método varargs simplificado" es en realidad solo una supresión de advertencia, pero debe dejar algún marcador en el código de bytes para que el código del cliente pueda mostrar las advertencias de manera diferente.
"Try-with-resources" genera código que puede manejar una excepción normal más una segunda excepción lanzada durante el bloque final. La excepción adicional se almacena utilizando el nuevo método addSuppressed() . Esto no es exactamente un cambio de formato de archivo de clase, pero claramente no funcionaría en máquinas virtuales anteriores.
"Multi-catch" también produce un código de bytes que es sutilmente diferente de lo que cualquier compilador anterior podría producir. Las entradas múltiples en la tabla de excepciones ahora apuntarán al mismo cuerpo de captura.