2011-01-21 19 views
6

Come restituire più di un valore da una funzione in Java? Qualcuno può fornire un codice di esempio per farlo usando le tuple? Non riesco a capire il concetto di tuple.Restituisce più di un valore da una funzione in 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; 
     } 
    } 
} 

Qual è l'errore nel codice di cui sopra?

+2

Java non ha tuple. Se ti piacciono, passa a Scala. –

+0

possibile duplicato di [Come restituire più oggetti da un metodo Java?] (Http://stackoverflow.com/questions/457629/how-to-return-multiple-objects-from-a-java-method) –

+0

io sempre usa HashMap per questo. Puoi mettere tutto ciò che vuoi, in base alla tua scelta di nomi. è come un lotto – kommradHomer

risposta

1

Non è possibile restituire più di un valore.

È possibile restituire array, raccolta se soddisfa il proprio scopo.

Nota: Sarebbe un valore, il riferimento al proprio oggetto [di matrice, raccolta] sarebbe restituito.

4

Creare una classe che contiene più valori necessari. Nel tuo metodo, restituisci un oggetto che è un'istanza di quella classe. Ecco!

In questo modo, si restituisce ancora un oggetto. In Java, non è possibile restituire più di un oggetto, qualunque esso sia.

+1

Per la precisione si restituisce un _reference_ ad un oggetto. –

1

È possibile restituire una matrice da una funzione java:

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

Ancora solo un oggetto (o un riferimento ad esso ...). La risposta è "no", ma è possibile restituire un array, una raccolta o un oggetto personalizzato che incapsula più oggetti. –

1

Non è possibile restituire più di un valore in Java (che non è pitone). Scrivi un metodo che restituisce solo array o lista o qualsiasi altro oggetto come questo

2

È questo quello che stai cercando?

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

Cosa succede se ciò che si sta restituendo sono di tipi di dati diversi proprio come la situazione. Oppure, ad esempio, diciamo che stai restituendo un nome di stringa e un'età intera. Puoi leggere JSON dalla libreria org.json. È possibile ottenere il barattolo al 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 ; 
} 

In seguito, se si desidera ottenere i dati da qualche parte nel vostro programma, questo è ciò che si fa:

//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 

Spero che si prova. Oppure puoi leggere di più su JSON in java se NON lo hai.

Problemi correlati