2013-08-13 5 views
0

dans mon projet java J'utilise deux piles, une qui ne contient que des doubles et une autre qui contient des entiers.Comment écrire une méthode qui accepte un paramètre générique?

Maintenant, je voudrais écrire une méthode générique putToStack(element) qui prend un élément, qui est soit un double ou un entier, et le met à la pile correspondante.

Mon problème est que j'ai encore quelques problèmes avec la syntaxe générique. Fondamentalement, je voudrais avoir cette méthode (s'il vous plaît corriger!) Quelqu'un peut-il m'aider avec l'implémentation de Java?

public void putToStack(Generic parameter) { 
    if (isDouble(parameter)) { 
     doubleStack.put(parameter); 
    } else { 
     integerStack.put(parameter); 
    } 
} 
+2

Utiliser la méthode surchargée. –

Répondre

2

Il est inutile de rendre la méthode générique si vous avez besoin d'extraire le type plus tard. Utilisez des méthodes surchargées, chacune prenant le type dont vous avez besoin.

public void putToStack(double parameter) { 
    doubleStack.put(parameter); 
} 
public void putToStack(int parameter) { 
    integerStack.put(parameter); 
} 
0

Utilisez simplement Object comme Parmeter car il est la classe parente de toutes les classes et peut donc tenir l'objet d'une sous-classe:

public void putToStack(Object parameter) 

Note: Mais pensez à votre conception plus .

0

Vous n'avez pas besoin de génériques, ce que vous cherchez est un simple polymorphisme. Java.lang.Number est la classe de base de Integer et Double, donc c'est le plus approprié. Cependant, pensez à ce qui se passe quand quelqu'un essaie d'ajouter un Flotteur à votre méthode?

Dans ce cas, vous voulez surcharger la méthode afin que seuls les doubles et les entiers soient autorisés. De cette façon, vous évitez ce cas et même supprimer cette déclaration si moche.

public void putToStack(Double number) { 
    doubleStack.put(parameter); 
} 
public void putToStack(Integer number) { 
    integerStack.put(parameter); 
} 
+0

Mais que se passe-t-il si la méthode 'putToStack' devient plus longue (par exemple, vérifier si la pile est vide ou non) qu'une seule ligne de code. Ne serait-ce pas beaucoup de code répétitif ?? – user2426316

+0

C'est un scénario différent et maintenant il est plus logique d'utiliser ce que j'ai dit à propos de java.langa.Number. N'utilisez pas non plus d'objet comme Juned Ahsan recommandé car c'est trop général. – Hiro2k

Questions connexes