2011-01-21 19 views
6

¿Cómo se devuelve más de un valor de una función en Java? ¿Alguien puede dar un código de muestra para hacer esto usando tuplas? No puedo entender el concepto de tuplas.Devuelve más de un valor de una función en Java


public class Tuple{ 
    public static void main(String []args){ 
     System.out.println(f()); 
    } 
    static Pair<String,Integer> f(){ 
     return new Pair<String,Integer>("hi",3); 
    } 
    public class Pair<String,Integer> { 
     public final String a; 
     public final Integer b; 

     public Pair(String a, Integer b) { 
      this.a = a; 
      this.b = b; 
     } 
    } 
} 

¿Cuál es el error en el código anterior?

+2

Java no tiene tuplas. Si te gustan, cambia a Scala. –

+0

posible duplicado de [¿Cómo devolver objetos múltiples desde un método Java?] (Http://stackoverflow.com/questions/457629/how-to-return-multiple-objects-from-a-java-method) –

+0

siempre usa HashMap para eso. Puede poner lo que quiera, marcado por su elección de nombres. es como un lote – kommradHomer

Respuesta

1

No puede devolver más de un valor.

Puede devolver Array, Collection si cumple con su propósito.

Nota: Sería un valor, se devolvería la referencia a su objeto [de matriz, colección].

4

Cree una clase que contenga los valores múltiples que necesita. En su método, devuelva un objeto que sea una instancia de esa clase. Voila!

De esta manera, todavía devuelve un objeto. En Java, no puede devolver más de un objeto, cualquiera que sea.

+1

Para ser precisos, devuelve una _ referencia_ a un objeto. –

1

Usted puede devolver una matriz desde una función java:

public static int[] ret() { 
     int[] foo = {1,2,3,4}; 
     return foo; 
    } 
+0

Todavía hay un solo objeto (o referencia a él ...). La respuesta es 'no', pero puede devolver una matriz, una colección o un objeto personalizado que encapsule múltiples objetos. –

1

No se puede devolver más de un valor en Java (que no es pitón). Escriba un método que simplemente devuelva una matriz o una lista o cualquier otro objeto como este

2

¿Es esto lo que está buscando?

public class Tuple { 
    public static void main(String[] args) { 
     System.out.println(f().a); 
     System.out.println(f().b); 
    } 

    static Pair<String, Integer> f() { 
     Tuple t = new Tuple(); 
     return t.new Pair<String, Integer>("hi", 3); 

    } 

    public class Pair<String, Integer> { 
     public final String a; 
     public final Integer b; 

     public Pair(String a, Integer b) { 
      this.a = a; 
      this.b = b; 
     } 
    } 
} 
0

¿Qué pasa si lo que devuelve son de diferentes tipos de datos al igual que su situación. O, por ejemplo, digamos que está devolviendo un nombre de cadena y una edad entera. Puedes JSON desde la biblioteca org.json. Usted puede obtener el frasco en http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm

public JSONObject info(){ 
    String name = "Emil"; 
    int age = 25; 
    String jsonString ="{\"name\":\""+ name+"\",\"age\":"+ age +"}"; 
    JSONObject json = new JSONObject(jsonString); 
    return json ; 
} 

Después, si desea obtener los datos en alguna parte de su programa, esto es lo que hace:

//objectInstanceName is the name of the instantiated class 
JSONObject jso = objectInstanceName.info(); 
String name = jso.getString("name"); 
int age = jso.getInt("age"); 
System.out.println(name + " is "+ age + " years old"); 

//Output will be like 
Emil is 25 years old 

Espero que lo intente. O puede leer más en JSON en Java si NO TIENE.

Cuestiones relacionadas