2009-06-19 6 views
0

Je crée un éditeur de cellule, mais j'ai déjà fait (et vu) cela dans d'autres codes. Je crée un objet, puis la laisser tomber sur le sol comme ceci:
ButtonCellEditor buttonColumn = new ButtonCellEditor(table, 2);Déposer des objets sur le sol

Cette classe prend la table, et définit une cellule équarrisseurs TableColumnModel et personnalisée pour elle. Ensuite, la méthode se termine et je ne référence plus l'objet buttonColumn.

Alors, y a-t-il une différence entre faire ce qui précède et le faire (ce qui fonctionne aussi)?
new ButtonCellEditor(table, 2);

Quelque chose ne va pas avec ça?

Répondre

9

Vous ne devriez pas avoir de variables inutilisées dans votre code, ce qui le rend moins clair. En outre, un constructeur est (comme son nom l'indique) une méthode pour initialiser l'objet, ceci dans votre cas n'est pas fait.

je vous suggère d'avoir une méthode statique à la place:

ButtonCellEditor.niceNameHere(table, 2); 

Le seul cas que je peux penser, dans lequel un constructeur serait suffisant est quand il faut params s'initialiser et effectuer certaines actions plus tard , mais pas pour faire l'action à l'intérieur et ce n'est pas comme le tien.

+1

+1 en soulignant l'effet de bord dans le constructeur. – akf

+1

dans ce cas, cependant, il peut ne pas être approprié que le nouvel objet contienne la variable transmise. Un CellEditor ne doit pas avoir de JTable en tant que membre. – akf

1

Il n'y a rien de mal à l'une ou l'autre de ces façons de créer un ButtonCellEditor. Cependant, si vous voulez plus tard référencer cet objet, avec la méthode deux, vous n'avez aucun moyen de le faire. Avec la méthode 1, vous pouvez au moins dire buttonColumn.method().

0

Aucune différence tangible, autant que je sache. Rien de mal non plus - je préférerais une forme plus courte, si la seule raison est d'obtenir des effets secondaires de construction de l'objet (ce qui n'est pas forcément un très bon design d'API en soi, IMO, mais cela n'a pas d'importance ici).

0

ils sont les mêmes, mais un commentaire sur la raison pour laquelle vous le faites pourrait être dans l'ordre. sinon quelqu'un pourrait venir et l'effacer, pensant que c'est une opération sans enquête.

vous pourriez aussi être plus explict et appelez

table.getColumn(2).setCellEditor(new ButtonCellEditor());

0

Il n'y a pas de différence réelle entre les deux cas. Dans le second cas, une variable anonyme sera créée qui sera normalement récupérée. Le deuxième cas vous permettra également d'économiser un peu de frappe et est un peu plus lisible. Un lecteur peut s'attendre à trouver une référence sur l'objet créé (si vous choisissez la première version) et être surpris s'il n'en trouve pas.

Dans tous les cas, une méthode statique peut être plus appropriée dans de tels cas.

Questions connexes