Erreur d'incompatibilité de Type entre java.lang.Chaîne et de la Chaîne
C'est vraiment une drôle de problème, je n'ai jamais rencontré quelque chose comme ça.
Ce qui suit est une classe d'aide j'ai déclarée à l'intérieur d'une classe plus large. Il fonctionne parfaitement bien comme il est:
private static class Tree<String> {
private Node<String> root;
public Tree(String rootData) {
root = new Node<String>();
root.data = rootData;
root.children = new ArrayList<Node<String>>();
}
private static class Node<String> {
String data;
Node<String> parent;
ArrayList<Node<String>> children;
}
}
Cependant, par déconner, j'ai découvert un problème de confusion.
En remplaçant cette ligne:
root.data = rootData;
avec:
root.data = "some string literal";
J'obtiens cette erreur:
Type mismatch: cannot convert from java.lang.String to String
J'ai testé quelques littéral de chaîne d'affectations dans d'autres classes, et il semble fonctionner parfaitement bien. J'ai récemment mis à jour pour Java 1.7.0_15 et récemment téléchargé et installé Eclipse 4.2. Je soupçonne qu'il pourrait y avoir une certaine confusion dans le build path ou quelque chose.
Utiliser Ubuntu 12.04
Toute aide serait grandement appréciée! J'ai cherché et cherché et je ne pouvais pas trouver quelque chose proche de ce problème.
OriginalL'auteur StumpedCoder | 2013-03-24
Vous devez vous connecter pour publier un commentaire.
Vous êtes en train de créer un nouveau paramètre de type générique appelé "Chaîne", qui n'est probablement pas ce que vous voulez.
Changement
à
OriginalL'auteur j__m
Il semble que vous essayez de créer une classe générique à l'aide de "Chaîne" comme le nom de votre type générique. Quels types génériques n'est chaque fois que vous créez un objet de la classe, il remplace ce qui est dans le
<>
avec le nouveau type.Donc, dans votre classe, si vous avez créé un
Tree<Integer>
, jamais instance de "Chaîne" dans votre classe pourrait être remplacé par "Integer". C'est la façon dont certaines des classes ArrayList de travail pour permettre à n'importe quel type à être utilisé.Habituellement lors de l'utilisation de types génériques, une seule lettre, comme "T", est utilisé pour éviter qu'elle ne soit la même chose qu'un vrai type de classe.
Donc dans votre cas, vous essayez de définir une "Chaîne" qui n'est effectivement pas une Chaîne de caractères comme une chaîne réelle.
OriginalL'auteur Jsdodgers
Je l'ai résolu en tapant
OriginalL'auteur Learning