Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

méthode et type d'argument variable

4 réponses
Avatar
yvon.thoravalNO-SPAM
supposons que j'aie une méthode :

public static ArrayList lireTable(ArrayList colonnesALire, String table)
{
}

je peux écrire une autre méthode, de même nom avec des Vector :

public static Vector lireTable(Vector colonnesALire, String table) {
}

pas de pb, ça se débrouille tout seul.

MAIS, est-il possible d'avoir ça :

public static Vector lireTableAll(String table) {
}

et aussi :

public static ArrayList lireTableAll(String table) {
}

la sélection se faisant sur le type de retour ???

--
yt

4 réponses

Avatar
Farid
MAIS, est-il possible d'avoir ça :
public static Vector lireTableAll(String table) {
}
et aussi :
public static ArrayList lireTableAll(String table) {
}

la sélection se faisant sur le type de retour ???


non pas possible.
il faut changer le type vers en type commun.
Vector a pour base AbstractList.
ainsi que ArrayList.
donc tu peux regrouper les 2 methodes en une seul:

public static AbstractList lireTableAll(String table) {}

pour les appellant, si tu a besoin de methode specific au Vector ou
ArrayList,
tu peux fait un
if (obj instanceof Vector) {...}
...

une autre methode est de cacher les type vector et arraylist dans des
objects et faire un peu d'heritage, mais bon si il n'y a pas besoin de creer
de nouveau object....



--
yt


Avatar
Thibault Cuvillier
Yvon,

La signature d'une méthode ne comprend pas le type de la valeur de retour.

Il faut 2 noms de méthodes:
List lireTableAsList(String s);
Vector lireTableAsVector(String s)

Au passage , mieux vaut retourner List (l'interface) que ArrayList
(L'implementation).

Thibault Cuvillier
http://www.b-technology.biz

Yvon Thoraval wrote:
supposons que j'aie une méthode :

public static ArrayList lireTable(ArrayList colonnesALire, String table)
{
}

je peux écrire une autre méthode, de même nom avec des Vector :

public static Vector lireTable(Vector colonnesALire, String table) {
}

pas de pb, ça se débrouille tout seul.

MAIS, est-il possible d'avoir ça :

public static Vector lireTableAll(String table) {
}

et aussi :

public static ArrayList lireTableAll(String table) {
}

la sélection se faisant sur le type de retour ???



Avatar
yvon.thoravalNO-SPAM
Thibault Cuvillier wrote:

Il faut 2 noms de méthodes:
List lireTableAsList(String s);
Vector lireTableAsVector(String s)

Au passage , mieux vaut retourner List (l'interface) que ArrayList
(L'implementation).


Ben oui, tout à fait d'accord d'autant que la classe, à laquelle je
cherche à être compatible (d'où le changement Vector -> ArrayList) fait
juste derrière un : Array.asList...
--
yt

Avatar
yvon.thoravalNO-SPAM
Farid wrote:


une autre methode est de cacher les type vector et arraylist dans des
objects et faire un peu d'heritage, mais bon si il n'y a pas besoin de creer
de nouveau object....


merci pour tes conseils, non tu as du imaginé, c'est juste une
"bidouille" pour tester un "tableview" (très belle implémentation de
jTable) à partir d'une de mes classes qui elle utilise le Vector en
standard du TableModel...

comme ce n'est qu'un essai je vais ajouter une méthode avec le suffixe
AL pour ArrayList et le contenu est quasiment identique vu qu'ArrayList
se traite comme Vector...
--
yt