A veces desea devolver múltiples valores de una función. ¿Cómo se hace esto normalmente en Java?
Una opción es usar una matriz, como este fragmento de Python que devuelve una lista o tupla:
value, success = read_unreliably()
if success:
print value
Otra opción sería devolver un hash / dict, como este ejemplo de JavaScript:
var result = readUnreliably()
if (result.success) {
alert(value);
}
Una más sería crear un objeto personalizado solo para este propósito, como este ejemplo de Java:
ReadUnreliablyResult result = readUnreliably()
if (result.getSuccess()) {
System.out.println(result.getValue());
}
Por supuesto, también puede usar algunas variables globales para almacenar lo que necesita en lugar de pasar las cosas, pero digamos que no es una opción.
java
coding-style
Mike M. Lin
fuente
fuente
Respuestas:
Penosamente.
Estas técnicas no funcionan bien en Java; los valores tendrían que ser downcast de Object.
Esto es más común, pero es tedioso crear todas esas pequeñas clases. En C ++ es común usar std :: pair pero esto no se hace comúnmente en Java.
Con Lombok es bastante fácil crear pequeños objetos personalizados:
}
fuente
Sí, la forma de crear un
struct
/tuple
/record
en Java es creando una clase. Si es solo para uso interno, prefiero usar una pequeña clase de estructura inmutable con campos públicos.Ejemplos:
Esto es mucho más fácil de hacer en Scala:
fuente
Tuple2[Boolean, Int]
. Aunque en este ejemplo específico , devolvería unOption[Int]
.Para el ejemplo que ha dado, lanzar una excepción sería la forma más estándar de manejarlo:
Además, si se esfuerza por tener funciones que "hagan una cosa", la característica de devolver múltiples valores es menos necesaria, aunque en ocasiones conveniente.
fuente
Tenemos una clase genérica Par que puede almacenar una instancia de A y una instancia de B. Probablemente pueda crear un Triplete o Quadruplet de la misma manera.
fuente
Pair<String, Integer>
, ¿qué significa eso? ¿Qué representan estos valores? no puede saberlo sin leer la implementación del método.En Java, su función devolvería un objeto (o quizás nulo en el caso de una falla). De esta manera, se pueden devolver múltiples datos.
fuente
No hay una forma explícita de devolver múltiples variables en Java, sin embargo, hay algunos enfoques:
fuente