6

これは本当に奇妙な問題です、私はそのようなものに遭遇したことがありません。以下は、私がより大きなクラス内で宣言したヘルパークラスです。そのままで完全に正常に動作します。

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

他のクラスでいくつかの文字列リテラルの割り当てをテストしましたが、完全に正常に機能しているようです。最近Java1.7.0_15にアップデートし、最近Eclipse4.2をダウンロードしてインストールしました。ビルドパスなどに混乱があるのではないかと思います。Ubuntu12.04を使用する

どんな助けでも大歓迎です!検索して検索しましたが、この問題に近いものは見つかりませんでした。

4

3 に答える 3

8

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

変化する

private static class Tree<String> {

private static class Tree {
于 2013-03-24T07:02:42.263 に答える
2

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

したがって、クラスで作成した場合、クラスTree<Integer>内の「String」のインスタンスは「Integer」に置き換えられます。これは、ArrayListなどの一部のクラスが機能して任意の型を使用できるようにする方法です。

通常、ジェネリック型を使用する場合、実際のクラス型と同じになるのを避けるために、「T」などの1文字が使用されます。

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

于 2013-03-24T06:57:44.300 に答える
0

私はタイプすることによってそれを解決しました

import java.lang.String;
于 2017-10-08T14:02:07.107 に答える