2013-03-24 21 views
5

これは実際には奇妙な問題です。私はそれに遭遇したことはありません。 以下は、私が大きなクラスの中で宣言したヘルパークラスです。java.lang.StringとStringの型の不一致エラー

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; 
    } 
} 

しかし、私は混乱する問題を発見しました。

root.data = rootData; 

:この行を置き換えることにより

root.data = "some string literal"; 

私はこのエラーを取得する:

Type mismatch: cannot convert from java.lang.String to String 

私は他のクラスにいくつかの文字列リテラルの割り当てをテストし、完璧に動作するように見えます良い。私は最近Java 1.7.0_15にアップデートし、最近Eclipse 4.2をダウンロードしてインストールしました。私はビルドパスや何かに混乱があるかもしれないと思う。 Ubuntuを使用する12.04

ご協力いただければ幸いです!検索して検索したところ、この問題に近いものは見つかりませんでした。

+0

を入力して、それを解決しました。私は前にこのようなことは何も経験していない。 –

答えて

7

"String"という新しいジェネリック型パラメータを作成していますが、これはおそらく必要ではありません。

private static class Tree { 
2

ジェネリック型の名前として "String"を使用してジェネリッククラスを作成しようとしているようです。ジェネリックタイプは、クラスからオブジェクトを作成するたびに<>のものを新しいタイプに置き換えます。

クラス内でTree<Integer>を作成した場合、クラス内の「String」のインスタンスは「Integer」に置き換えられます。これは、ArrayListのようないくつかのクラスがどんな型でも使用できるようにする方法です。

通常、ジェネリックタイプを使用するときは、「T」などの1文字を使用して、実際のクラスタイプと同じにならないようにします。

あなたの場合、実際の文字列ではなく実際には文字列ではない「文字列」を設定しようとしています。

0

変更

private static class Tree<String> { 

私はこれは本当に面白いです

import java.lang.String;