2010-09-16 2 views
1

En C++, on pourrait tout simplement faire quelque chose comme ceci:Comment les structures fonctionnent-elles en Java?

struct GraphObject { 
Color color; 
double value; 
String name; 
}; 

Cependant en Java, je ne peux pas simplement faire ceci, je ne vois créer une classe juste pour cela comme une option. Ce que je n'aime pas c'est que j'ai besoin de faire glisser GraphObject.java et Graph.java (puisque Graph contiendra une ArrayList de GraphObject. Y at-il un moyen de mettre la classe d'objet avec Graph.java ou est-ce simplement impossible?/mauvaise pratique?

Merci

Répondre

1

vous pouvez le faire. Si c'est le seul fichier que vous utilisez la classe, ce n'est pas un problème. Si vous l'utilisez dans d'autres fichiers, cela fonctionnera, mais ce n'est pas considéré comme une bonne pratique

Fais-le comme inner class.

+1

Comme il n'a probablement pas besoin d'utiliser un 'Graph' à partir d'un' GraphObject', une classe régulière imbriquée est mieux que une classe interne. – Gabe

+2

En fait, vous utiliseriez une classe imbriquée statique, car la classe imbriquée a très rarement besoin d'accéder aux membres de la classe englobante. – helpermethod

3

Vous pouvez créer une classe dans une autre classe si vous le souhaitez.

class Graph { 

    class GraphicObject { 
     Color color; 
     double value; 
     String name; 

     // You can omit this, and treat it just like a struct if you want 
     GraphicObject(Color c, Double b, String n) { 
      // ... 
     } 
    } 

    List<GraphicObject> myObjects(); 
    // other things about Graph here, as normal 

} 
6

Vous voulez faire une classe imbriquée statique:

 
public class Graph { 
    static class GraphicObject { 
     Color color; 
     double value; 
     String name; 
    } 
} 

Si vous omettez le mot-clé static, chaque instance de graphique crée automatiquement une instance de GraphicObject. De plus, les références seront liées ensemble permettant un accès synthétique à la classe externe en utilisant le this. Les classes (internes) non statiques sont rarement nécessaires et ajoutent beaucoup de coût à la création d'objets.

Pour plus d'informations sur les différences entre les classes imbriquées statiques et non statiques: http://blogs.oracle.com/darcy/entry/nested_inner_member_and_top

Questions connexes