IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[Typage] Comment typer dynamiquement ou supprimer les erreurs de typage


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 19
    Points : 14
    Points
    14
    Par défaut [Typage] Comment typer dynamiquement ou supprimer les erreurs de typage
    Bonsoir à tous,

    j'ai un petit soucis au niveau de mon code.

    Soucieux de séparer le traitement des données, j'ai créé une énumération comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    public enum CatalogEnum {
    	SupplierName		(String.class, "getFournisseur"),
    	;
     
    	private Class defaultValueType;
    	private Object accessMethod;
     
    	CatalogEnum (Class defaultValueType, Object accessMethod) {
    		this.defaultValueType = defaultValueType;
    		this.defaultValueOrAccessMethod = accessMethod;
    	}
     
    	public Object accessMethod() {
    		return accessMethod;
    	}
     
    	public Class defaultValueType () {
    		return defaultValueType;
    	}
     
    	public Object getValue (Catalog catalog) {
    		return defaultValueType.cast(getCatalogDomainValueByDynamicCall (catalog));
    	}
     
    	public Object getCatalogDomainValueByDynamicCall (Catalog catalog) {
    		Class clazz = catalog.getClass();
            Method method = null;
    		try {
    			method = clazz.getMethod((String) accessMethod, Class[].class.cast(null));
    		} catch (SecurityException e) {
    			e.printStackTrace();
    		} catch (NoSuchMethodException e) {
    			e.printStackTrace();
    		}
            try {
    			return method.invoke(catalog, Object[].class.cast(null));
    		} catch (IllegalArgumentException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (InvocationTargetException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    }
    Elle m'indique le nom de la méthode à appeler dynamiquement est "getFournisseur" et le type retourné par "getFournisseur" est "String.class".

    Lorsque j'appelle mon énumération:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    flux.setFournisseur(CatalogEnum.SupplierName.getValue(catalogLine));
    Eclipse me mets l'erreur suivante:
    The method setFournisseur(String) in the type FluxBase.Flux is not applicable
    for the arguments (Object)
    Il faudrait que j'arrive à renvoyer explicitement le bon type, tout en évitant de préfixer mon appel comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (String) CatalogEnum.SupplierName.getValue(catalogLine)
    J'ai regardé du côté des annotations pour indiquer à la compil de ne pas se soucier des types mais je n'ai rien trouvé. Ou alors mieux utiliser les énumérations...

    Merci pour vos suggestions.

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Pourquoi tu n'appelle pas simplement tes méthodes? quelle contrainte fonctionnelle te pousse à adopter cette solution la?

  3. #3
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Un objet de la classe Method te donnes le type renvoyé par la méthode ; tu peux travailler à partir de ça, ai-je l'impression. Vois getReturnType.

    Néanmoins avant de voir le lien, je te conseille de suivre l'avis de Netangel, qui me semble assez sage

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/02/2010, 20h01
  2. Comment supprimer les message d'erreur Gtk+ ?
    Par Slookeur dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 09/06/2009, 09h29
  3. comment fait on pour supprimer les marques dans le code
    Par tortuedu74 dans le forum VB.NET
    Réponses: 3
    Dernier message: 18/05/2009, 10h48
  4. Comment tronquer une date (supprimer les heures)
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 27/01/2006, 15h58
  5. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo