Múltiples constructores con parámetros de argumentos variables.

Según esta muy buena respuesta en la pregunta "Varargs en la sobrecarga de métodos en Java" a continuación, se encuentran las reglas utilizadas por el compilador de Java para seleccionar la firma del método a invocar. Se basan en JLS 5.3. Método Invocación Conversión docs.

  1. El ensanchamiento primitivo usa el argumento de método más pequeño posible
  2. El tipo de contenedor no se puede ampliar a otro tipo de contenedor
  3. Puede Box de int a Integer y ampliar a Objectpero no aLong
  4. La ampliación supera al boxeo, el boxeo supera a los var-args.
  5. Puedes Boxear y luego Widen (An intpuede convertirse en Objectvia Integer)
  6. No puedes Ampliar y luego Box (Un intno puede convertirse Long)
  7. No puede combinar var-args, ya sea con ensanchamiento o boxeo.

Debido a que ambos constructores son var-args (regla 7), el compilador recurrirá a otras reglas y seleccionará el método que utiliza el tipo más pequeño (regla 1).

Puede confirmar este comportamiento con el siguiente código:

static class SomeClass {
  SomeClass(long... value) { System.out.println("Long"); }
  SomeClass(int... value) { System.out.println("Int"); }
  SomeClass(byte... value) { System.out.println("Byte"); }
}

public static void main(String[] args) throws Exception {
  SomeClass o = new SomeClass(); // Byte
}

La relación de subtipo precisa entre los tipos primitivos utilizados en la regla 1 se explica en JLS 4.10.1. Subtipificación entre tipos primitivos .

Las siguientes reglas definen la relación de supertipo directo entre los tipos primitivos:

  • doble> 1 flotador

  • flotador> 1 largo

  • largo> 1 int

  • int> 1 char

  • int> 1 corto

  • corto> 1 byte

Respuesta 1

He utilizado múltiples subprocesos sincronizados para procesar múltiples transacciones y estas transacciones se obtienen de la base de datos mediante el uso de marcos de hibernación y el concepto de bloqueo utilizado. El problema es que cada hilo ...

Estoy usando CosmosDb para un proyecto, y primero estaba probando la API SQL Document-db java. Con esa API, puedo establecer TTL a nivel de elemento directamente en el propio documento. Ex. Documento documento = documento nuevo (nuevo ...

¿Cómo encuentro la similitud de coseno entre dos vectores y cada elemento del vector tiene un rango diferente? Por ejemplo, cada vector tiene dos elementos, V = {v [0], v [1]}, como {edad, altura}, donde edad ...

Antecedentes: mi objetivo es recopilar varias marcas de tiempo mientras ejecuto las pruebas JUnit 5 en un entorno Spring para crear una estadística de las duraciones de las diferentes tareas. (Repositorio para referencia) ...