OVH Cloud OVH Cloud

warning eclipse this method as a constructor name

6 réponses
Avatar
yvon.thoravalNO-SPAM
B'jour , comment allez-vous de bon matin ?

Bon, j'en suis tjs avec mes decouvertes grâce à Eclipse, là, j'ai un
warning :

This method as a constructor Name. Bon, un constructeur n'est-il pas une
méthode ?

La ligne où ça se passe :
<code>
public int Comparator(ImageIcon imageIcon1, ImageIcon imageIcon2) {
</code>
qui est dans une classe qui a la structure suivante :

<code>
public class Comparator {
private int r;
public int Comparator(ImageIcon imageIcon1, ImageIcon imageIcon2) {
return Comparator(imageIcon1.getDescription(),
imageIcon2.getDescription());
}
public int Comparator(Integer integer1, Integer integer2) {
}

[...] etc sur tous les types rencontrés
}
</code>
la classe appellante :

<code>
public class AddressesComparator extends Comparator implements
SortTableComparator {

[...] // override
java.util.Comparator#compare(java.lang.Object, java.lang.Object)

public int compare(Object obj1, Object obj2) {

[...] // les obj[1|2] sont deux rows j'un JTable...

switch(column) {

[...] // en fonction de la colonne, on compare
// différents objets :

case 4: result = Comparator(data1.getPhone(),
data2.getPhone()); break;
[...]
}

return ascending ? result : -result;
}
</code>


Je ne comprends pas très bien le warnig de eclipse, mais je veux bien en
apprendre qqc. Pourquoi je fais ça ? en fait j'ai un tas de
"MachinComparator extends Comparator implements SorTableComparator {}

AdressesComparator, BouteillesComparator... CepagesComparator

donc je n'ai voulu implémenter qu'une seule classe de Comparator (je
suis paresseux) qui ne compare que sur une colonne spécifique alors que
les AdressesComparator eux sont spécifiques au type de données
visualisées.

bien sur je ne suis pas du tout satisfait de ce design (warning eclipse)
qui marche impec tout de même surtout qqc me gène c'est le switch
column, qui me semble "contradictoire" avec Comparator() sensé avaler
n'importe quel type (Icon, String...)

donc je pense qu'il vaudrait mieux utiliser l'introspection pour savoir
a quel type de données on a affaire parce que là le data1.getPhone()
fixe le phone number à une colonne spécifique, pas très bon
(maintenance...)

donc, par exemple, la table des appellations défini une ligne
d'appellation :
<code>
public class Appellations extends Tables {
public Appellations() {
[...] // appell de la db pour remplir ce bazard
}
// je défini une ligne de cette table :
public static class Row {
private Integer mId;
[...] // und so weiter ...
private String mWineColor;
// la ligne proprement dite :
public Row(Integer pId, String pCountry,
String pRegion, String pAppellation,
String pWineColor) {
mId = pId;
[...] // und so weiter ...
}
// enfin tous les getters et setters
[...]
}
</code>

Donc, en résumé, je trouve stupide de s'em$@#der avec tous les setters
et getters, la définition d'une ligne pour finalement tester le n° de la
colonne dans le comparator (c'est l'utilisateur qui en cliquant sur le
header d'une colonne demande à trier suivant cette colonne), ET aussi,
je voudrais bien comprendre ce que cherche à me dire eclipse...



--
yt

6 réponses

Avatar
Black Myst
Yvon Thoraval wrote:
B'jour , comment allez-vous de bon matin ?

Bon, j'en suis tjs avec mes decouvertes grâce à Eclipse, là, j'ai un
warning :

This method as a constructor Name. Bon, un constructeur n'est-il pas une
méthode ?

je voudrais bien comprendre ce que cherche à me dire eclipse...


Je pense que c'est juste un avertissement sur les convention de nommage
- une methode commence par une minuscule
- un constructeur prend le nom de la classe, donc commence par une majuscule

Avatar
yvon.thoravalNO-SPAM
Black Myst <Black_point_myst_chez_free_fr> wrote:


Je pense que c'est juste un avertissement sur les convention de nommage
- une methode commence par une minuscule
- un constructeur prend le nom de la classe, donc commence par une majuscule


OK, je changerai ça alors, pas très pointu...

Merci !

--
yt

Avatar
Thibaut Desmarest
Black Myst wrote:
Yvon Thoraval wrote:

B'jour , comment allez-vous de bon matin ?

Bon, j'en suis tjs avec mes decouvertes grâce à Eclipse, là, j'ai un
warning :

This method as a constructor Name. Bon, un constructeur n'est-il pas une
méthode ?

je voudrais bien comprendre ce que cherche à me dire eclipse...



Je pense que c'est juste un avertissement sur les convention de nommage
- une methode commence par une minuscule
- un constructeur prend le nom de la classe, donc commence par une
majuscule


Je suis peut être aveugle mais je n'ai pas vu de Comparator ecrit avec
un c minuscule. Pour moi, c'est plutôt parceque tu as écrit public "int"
Comparator(...) que ça ne passe pas.

En effet, un constructeur ne renvoie pas de variable. Donc il considère
bien ton public int Comparator comme une méthode, mais il râle en effet
pour une histoire de conventions, car ce n'est pas très "propre"
d'utiliser le nom de la classe comme nom de méthode, c'est reservé au
constructeur normallement...


Avatar
yvon.thoravalNO-SPAM
Thibaut Desmarest wrote:


En effet, un constructeur ne renvoie pas de variable. Donc il considère
bien ton public int Comparator comme une méthode, mais il râle en effet
pour une histoire de conventions, car ce n'est pas très "propre"
d'utiliser le nom de la classe comme nom de méthode, c'est reservé au
constructeur normallement...


Oui, en fait ma prétendue classe "Comparator" n'est là que pour stocker
des compareTwoObjects(Obj1, Obj2) (j'ai changer le nom des méthodes
entre temps) qui sont communs au vrais Comparators :
AddressesComparator(), ... VinePlantComparator() car ces derniers
s'appuient sur un set d'objets plus "primitifs" communs : Integer,
String, ImageIcon ...

J'aurai du appeller cette classe Comparator autrement, qqc comme
PrimeObjectComparator, or something the like.

c'est, en qq sorte une "collection" de comparateurs effectifs les
méthodes de comparaisons portants toutes le même nom.

Il y a deux différences avec le compare() :

- spécificité des objets (par ex je compare la description d'une
icone...)

- j'intègre la comparaison de deux objets éventuellement null suivant le
tableau :
string1 | string2 | r

------------------------------------

null | null | 0

null | not null | - 1

not null | null | 1

not null | not null | as usual

ce qui est vrai pour string1, string2, l'est aussi pour bool1, bool2...
icon1, icon2.
--
yt

Avatar
Olivier Thomann
B'jour , comment allez-vous de bon matin ?

Bon, j'en suis tjs avec mes decouvertes grâce à Eclipse, là, j'ai un
warning :

This method as a constructor Name. Bon, un constructeur n'est-il pas une
méthode ?
Non. Un constructeur n'a pas de type retour. C'est implicitement void.

Genre un constructeur pour ta classe est:
public Comparator(....) {
}

Tu n'as pas de type retour. Pas de "int" dans ton cas. Un constructeur
n'a pas de nom en tant que tel. Le nom doit être celui de la classe,
mais côté VM le nom d'un constructeur est <init>.


La ligne où ça se passe :
<code>
public int Comparator(ImageIcon imageIcon1, ImageIcon imageIcon2) {
écrit plutôt:

public int comparator(ImageIcon imageIcon1, ImageIcon imageIcon2) {

Mais idéalement je dirais que:
public int compare(ImageIcon imageIcon1, ImageIcon imageIcon2) {
C'est sûrement mieux au niveau des conventions de nommage.

Si tu veux "nettoyer" ton code avec Eclipse, tu devrais mettre toutes
les options en "error" au lieux de "warning". Tu seras surpris :-).
--
Olivier

Avatar
yvon.thoravalNO-SPAM
Olivier Thomann wrote:


Si tu veux "nettoyer" ton code avec Eclipse, tu devrais mettre toutes
les options en "error" au lieux de "warning". Tu seras surpris :-).


Ouias, ouais, d'accord, lentement mais surement...
(Il m'a deja proposé de créer des interfaces...)
--
yt