java.lang.String 和 String 之间的类型不匹配错误

Posted

技术标签:

【中文标题】java.lang.String 和 String 之间的类型不匹配错误【英文标题】:Type mismatch error between java.lang.String and String 【发布时间】:2013-03-13 19:42:12 【问题描述】:

这真是一个奇怪的问题,我从来没有遇到过这样的事情。 以下是我在一个更大的类中声明的辅助类。它运行得非常好:

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

任何帮助将不胜感激!我已经搜索和搜索,找不到任何接近这个问题的东西。

【问题讨论】:

这真的很有趣。我以前从未遇到过这样的事情。 【参考方案1】:

您正在创建一个名为“String”的新泛型类型参数,这可能不是您想要的。

改变

private static class Tree<String> 

private static class Tree 

【讨论】:

【参考方案2】:

您似乎正在尝试使用“String”作为泛型类型的名称来创建泛型类。泛型类型的作用是每当您从该类创建一个对象时,它会将 &lt;&gt; 中的任何内容替换为新类型。

因此,在您的班级中,如果您创建了Tree&lt;Integer&gt;,那么您班级中的“String”实例将被“Integer”替换。这是某些类(例如 ArrayList)的工作方式,允许使用任何类型。

通常在使用泛型类型时,使用单个字母,例如“T”,以避免与真正的类类型相同。

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

【讨论】:

【参考方案3】:

我通过输入解决了它

import java.lang.String;

【讨论】:

我收到与 String somefunction() 相同的错误消息。导入删除了错误消息。 这不应该是一个答案。 java.lang 和所有子包都是自动导入的并且应该存在。 写入 import java.lang.String 的错误消失了; .我没有说谎。 好吧,那么您的本地设置或类路径存在更大的问题。 String 是 java.lang 的一部分,它是 java 中默认可用的包,不需要导入。检查接受的答案,这是正确的答案。 java.lang 不是自动导入的,在我的情况下不是。在教程中导入它。

以上是关于java.lang.String 和 String 之间的类型不匹配错误的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.String 和 String 之间的类型不匹配错误

无法解析方法 put(java.lang.string, java.lang.string)

无法将 java.lang.String 字段设置为 java.lang.String

深入理解java.lang.String

GStringImpl 不能转换为 java.lang.String

创建一个可变的 java.lang.String