recorrer programas matriz matrices ejercicio dinamica cuadrada arreglos 3x3 java arrays java-8 method-reference

programas - ¿Cómo funcionan las referencias de constructor de matrices Java 8?



programas en java de matrices (1)

Digamos que tenemos una variable de tipo IntFunction que devuelve una matriz de enteros:

IntFunction<int[]> i;

Con los genéricos de Java 8, es posible inicializar esta variable con una referencia de constructor como esta:

i = int[]::new

¿Cómo lo traduce el compilador de Java a bytecode?

Sé que para otros tipos, como String::new , puede usar una instrucción invokedynamic que apunte al constructor de cadenas java/lang/String.<init>(...) , que es solo un método con un significado especial.

¿Cómo funciona esto con las matrices, viendo que hay instrucciones especiales para construir matrices?


Puedes descubrirlo descompilando el bytecode de java:

javap -c -v -p MyClass.class

El compilador desugars array constructor hace referencia a Foo[]::new en un lambda ( i -> new Foo[i] ), y luego continúa como con cualquier otra lambda o referencia de método. Aquí está el bytecode desmontado de esta lambda sintética:

private static java.lang.Object lambda$MR$new$new$635084e0$1(int); descriptor: (I)Ljava/lang/Object; flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC Code: stack=1, locals=1, args_size=1 0: iload_0 1: anewarray #6 // class java/lang/String 4: areturn

(Su tipo de devolución es Object porque el tipo de devolución borrado en IntFunction es Object).