Hace mucho tiempo tuve una conversación con Ken Arnold (miembro de tiempo del equipo de Java), esto habría sido en la primera conferencia de Java One, probablemente en 1996. Dijo que estaban pensando en agregando múltiples valores devueltos para que pueda escribir algo como:
x, y = foo();
The rec La forma omitida de hacerlo en ese entonces, y ahora, es crear una clase que tenga múltiples miembros de datos y devolverlos en su lugar.
Basado en eso, y otros comentarios hechos por personas que trabajaron en Java, yo diría que la intención es/era que devuelva una instancia de una clase en lugar de modificar los argumentos que se aprobaron en.
Este es una práctica común (como lo es el deseo de los programadores C de modificar los argumentos ... eventualmente ven la forma Java de hacerlo normalmente. Solo piensen en ello como devolver una estructura. :-)
(Edición basada en siguiente comentario)
Estoy leyendo un archivo y generando dos matrices, de tipo String e int de , escogiendo un elemento para ambos desde cada línea. Quiero devolver ambos a cualquier función que lo llame que un archivo dividir de esta manera.
creo que, si te estoy entendiendo correctamente, THT que probablemente hacer soemthing así:
// could go with the Pair idea from another post, but I personally don't like that way
class Line
{
// would use appropriate names
private final int intVal;
private final String stringVal;
public Line(final int iVal, final String sVal)
{
intVal = iVal;
stringVal = sVal;
}
public int getIntVal()
{
return (intVal);
}
public String getStringVal()
{
return (stringVal);
}
// equals/hashCode/etc... as appropriate
}
y luego tener su método como este:
public void foo(final File file, final List<Line> lines)
{
// add to the List.
}
y luego llamar es así:
{
final List<Line> lines;
lines = new ArrayList<Line>();
foo(file, lines);
}
Sé exactamente lo que estás diciendo, pero la construcción de objetos con el único propósito de devolver múltiples valores ha demostrado ser confusa en la práctica, sin duda para mí. Definitivamente va en contra de lo que se supone que es una clase. – euphoria83
No está en contra de lo que debería ser una clase. Hay cosas tales como "clases de valores" en las que el objetivo principal es simplemente mantener el estado y no proporcionar ningún comportamiento. ¿Cuál es la confusión que has experimentado? – TofuBeer
Solo que entonces hay un par de clases que no hacen nada excepto sentarse ahí para la transferencia de valor. Intento hacer una clase solo si tiene/tiene algo significativo. – euphoria83