2010-11-17 7 views
16
public static BTNode<E> treeCopy(BTNode<E> source) 
{ 
    if(source == null) 
     return null; 
    else 
    { 
     BTNode left = BTNode.treeCopy(source.left); 
     BTNode right = BTNode.treeCopy(source.right); 
     return new BTNode(source.data, left, right); 
    } 

} 

Mes questions sont les suivantes: pourquoi ne puis-je pas utiliser le type E générique dans un contexte statique? J'ai essayé de chercher plusieurs réponses qui n'en trouvaient pas qui faisaient snese.Utilisation de types génériques dans un contexte statique

+0

duplication possible de [Méthode statique dans une classe générique?] (Http://stackoverflow.com/questions/936377/static-method-in-a-generic-class) –

Répondre

19

Vous devez déclarer le type générique dans la signature de la méthode:

public static <E> BTNode<E> treeCopy(BTNode<E> source) 
{ 
    if(source == null) 
     return null; 
    else 
    { 
     BTNode<E> left = BTNode.treeCopy(source.left); 
     BTNode<E> right = BTNode.treeCopy(source.right); 
     return new BTNode(source.data, left, right); 
    } 
} 
7

E peut signifier quoi que ce soit. Pour utiliser E (en tant que générique), vous devez créer une instance d'un objet. Vous ne pouvez pas le faire si vous avez une méthode statique, car les paramètres de type génériques sont uniquement dans la portée d'une instance de la classe (qui inclut ses méthodes d'instance et ses champs d'instance).

Les membres et champs statiques appartiennent à chaque instance de la classe. Donc, si vous aviez une instance de BTNode<String> et une autre instance de BTNode<Integer>, que devrait exactement utiliser le treeCopy statique? String ou Integer?

Il y a une barre de travail; vous devez dire à la méthode statique ce que signifie E. Donc, vous devrez définir comme ceci:

public static <E> BTNode<E> treeCopy(BTNode<E> source) 

Il serait également utile de prendre un second regard sur votre conception et voir si cela est en fait ce que vous voulez.

Questions connexes