2010-04-01 4 views
2

Comment retourner un tableau d'objets dans java?Comment retourner un tableau d'objets dans java?

+0

Que voulez-vous dire par retour? – pkananen

+2

@peter je suppose que le retour n'a qu'une signification en programmation. c'est-à-dire retourner une valeur à partir d'une fonction. Voulez-vous ajouter une autre personne à la liste? Je plaisante: D – RubyDubee

+0

Je suppose que je n'ai pas vu ce qui serait difficile sur le rendement réel. L'instanciation, peut-être. – pkananen

Répondre

6
public Object[] myMethod() { 
    Object[] objectArray = new Object[3]; 
    return objectArray; 
} 

Assez simple, vraiment.

8

Eh bien, vous ne pouvez réellement retourner qu'un tableau de références aux objets - aucune expression en Java n'évalue réellement aux objets eux-mêmes. Cela dit, retournant un tableau de références d'objets est facile:

public Object[] yourMethod() 
{ 
    Object[] array = new Object[10]; 
    // Fill array 
    return array; 
} 

(Pour être tout à fait pédant à ce sujet, vous retournez une référence à un tableau de références d'objets.)

-2

Retour d'un Le tableau d'objets a été expliqué ci-dessus, mais dans la plupart des cas vous n'avez pas besoin de le faire. Passez simplement votre tableau d'objets à la méthode, modifiez-le et il reflètera de l'endroit appelé. Il n'y a pas de valeur de passage en Java.

+2

Il n'y a pas de passage par * référence * en Java. * Tout * est passé en valeur, y compris les références. –

+2

De toute façon, ce genre de modification est considéré comme une mauvaise pratique, je sais que c'est la chose de facto en C et beaucoup de programmeurs C++ le font aussi mais non, c'est Java, différents paradigmes, différentes bonnes pratiques . – Esko

+0

@Jon Skeet: Désolé ma mauvaise! C'est ce que je voulais dire! @Esko: Est-ce vrai? C'est comme ça que j'ai vu la plupart des endroits supposés être la meilleure pratique! Il est temps d'y retourner et de vérifier! –

0

Essayez l'exemple suivant,

public class array 
{ 
    public static void main(String[] args) 
    { 
    Date[] a = new Date [i]; 

    a[0] = new Date(2, "January", 2005); 
    a[1] = new Date(3, "February", 2005); 
    a[2] = new Date(21, "March", 2005); 
    a[3] = new Date(28, "April", 2005); 

    for (int i = a.length - 1; i >= 0; i--) 
    { 
     a.printDate(); 
    } 
    } 
} 

class Date 
{ 
    int day; 
    String month; 
    int year; 

    Date(int d, String m, int y) 
    { 
    day = d; 
    month = m; 
    year = y; 
    } 

    public void printDate() 
    { 
    System.out.println(a[i]); 
    } 
} 
3

réponses posté plus tôt permet de résoudre votre problème tout à fait ... si juste pour l'amour d'un autre choix .. Je vous suggère d'utiliser List: peut être ArrayList<Object> il pourrait aller en tant que:

public List<Object> getListOfObjects() { 
    List<Object> arrayList = new ArrayList<Object>(); 
    // do some work 
    return arrayList; 
} 

Bonne chance;

+1

Pas de vote de ma part parce que vous ne devriez pas vraiment retourner une implémentation de List spécifiée, à moins que cette implémentation ne rende une garantie primordiale à votre interface. –

+0

@Tim: Je suis tellement désolé mais je suis incapable de comprendre votre point de vue. Est-ce que je manque quelque chose? – RubyDubee

+1

La collection, l'ensemble, la liste d'interfaces Java, etc ... offrent chacun certaines garanties, telles que l'ordre de traversée ou la limitation de la duplication. Vous spécifiez une API publique qui renvoie spécifiquement une ArrayList, mais il n'y a aucune raison pour laquelle cette API publique doit être une ArrayList et pas seulement une List. Que se passe-t-il si l'implémentation de votre méthode est bâclée et pourrait grandement bénéficier de l'utilisation de certaines implémentations List autres que ArrayList?Les futurs responsables de votre code ne pourraient pas simplement brancher une autre implémentation de List car ils sont forcés de respecter le contrat de renvoi d'une ArrayList. –

1

Quelle est la structure de données que vous avez?

  • Si c'est un tableau - il suffit de le retourner.
  • S'il s'agit d'un Collection - utilisez toArray() (ou de préférence toArray(T[] a)).
0

essayer cette

public ArrayList<ObjectsType> fName(){ 
    ArrayList<ObjectsType>objectsList=new ArrayList<>(); 
    objectList.add(objets); 
    return objectList; 
} 
Questions connexes