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

我在其他类中测试了一些字符串文字赋值,它似乎工作得很好。我最近更新到 Java 1.7.0_15,最近下载并安装了 Eclipse 4.2。我怀疑构建路径或其他东西可能有些混乱。使用 Ubuntu 12.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”,以避免它与真正的类类型相同。

因此,在您的情况下,您尝试将实际上不是字符串的“字符串”设置为实际字符串。

于 2013-03-24T06:57:44.300 回答
0

我通过输入解决了它

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