Pasando número variable de parámetros del método de llamada

CosminO:

Suponiendo que tenemos un método que recibe al menos un parámetro y potencialmente 0 o más parámetros del mismo tipo:

public void method(T p1, T... otherPs)

Y que tenemos un método que llama que es similar al siguiente:

public void callingMethod(T... params) 

que sabemos que tiene al menos un parámetro.

¿Es posible llamar methoda partir callingMethodde algo como esto?

public void callingMethod(T... params){
    [...]
    method(params[0], restOfParams);
    [...]
}
LppEdd:

Sin duda, esto es posible y muy fácil.
La única sobrecarga es la creación de otra matriz.
Ver Eugene respuesta de entender el consumo de memoria.


public void callingMethod(T... params){
    ...
    method(params[0], Arrays.copyOfRange(params, 1, params.length));
    ...
}

Un poco fuera de tema, pero yo sólo corro JOL, como se sugiere, y aquí está la salida para la matriz un vacío referencias

final String[] array = new String[0];

# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 0x0000000800000000 base address and 0-bit shift.
# Objects are 8 bytes aligned.
# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]

[Ljava.lang.String;@7ea37dbfd object externals:
          ADDRESS       SIZE TYPE                PATH                           VALUE
        71695b2d0         16 [Ljava.lang.String;                                []

Para una matriz con una sola, null, elemento

final String array = new String[1];

[Ljava.lang.String;@7ea37dbfd object externals:
          ADDRESS       SIZE TYPE                PATH                           VALUE
        71692a7a8         24 [Ljava.lang.String;                                [null]

Para una matriz que contiene un único, no null, elemento

final String array = new String[1];
array[0] = new String("");

[Ljava.lang.String;@7ea37dbfd object externals:
          ADDRESS       SIZE TYPE                PATH                           VALUE
        707612b68         16 [B                  [0].value                      []
        707612b78    1577856 (something else)    (somewhere else)               (something else)
        707793ef8         24 [Ljava.lang.String;                                [(object)]
        707793f10         24 java.lang.String    [0]                            (object)

Supongo que te gusta

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