Type mismatch-Fehler zwischen java.lang.String und String
Dies ist wirklich ein seltsames problem, das ich nie begegnet bin, so etwas.
Das folgende ist eine Hilfsklasse, die ich erklärt haben innen eine größere Klasse. Es läuft alles perfekt in Ordnung ist:
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;
}
}
Jedoch durch Herumspielen entdeckte ich eine verwirrende problem.
Durch ersetzen Sie diese Zeile:
root.data = rootData;
mit:
root.data = "some string literal";
Bekomme ich diesen Fehler:
Type mismatch: cannot convert from java.lang.String to String
Getestet habe ich einige string-literal Aufgaben in anderen Klassen und es scheint zu funktionieren sehr gut. Ich vor kurzem aktualisiert, um Java-1.7.0_15 und vor kurzem heruntergeladen und installiert Eclipse 4.2. Ich vermute, es könnte einige Verwirrung in den build path oder so etwas.
Mit Ubuntu 12.04
Jede Hilfe wäre sehr geschätzt werden! Ich habe gesucht und gesucht und konnte nicht finden, dass irgendetwas in der Nähe zu diesem problem.
- Das ist wirklich interessant. Ich habe noch nie auf etwas gestossen, wie dies vor.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie einen neuen generischen Typ-parameter mit dem Namen "String", das ist wahrscheinlich nicht das, was Sie wollen.
Ändern
zu
Es scheint, wie Sie versuchen, erstellen Sie eine generische Klasse, die mit "String" mit dem Namen Ihres generischen Typ. Was generische Typen tun ist, wenn Sie erstellen ein Objekt aus der Klasse, Sie ersetzt alles, was in der
<>
mit der neuen Art.Also in Ihrer Klasse, wenn Sie erstellt eine
Tree<Integer>
, je Instanz von "String" in Ihrer Klasse würde ersetzt werden durch "Integer". Dies ist der Weg einige Klassen wie ArrayList arbeiten zu ermöglichen, gleich welcher Art, verwendet werden.In der Regel bei der Verwendung von generischen Typen, einen einzigen Buchstaben wie "T", wird verwendet, um zu vermeiden, dass es das gleiche wie ein echt Klasse Typ.
So, in Ihrem Fall, Sie versuchen, ein "String" ist nicht wirklich ein String als eine tatsächliche Zeichenfolge.
Ich löste es durch Eingabe