【问题标题】:Type mismatch error between java.lang.String and Stringjava.lang.String 和 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

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

【问题讨论】:

  • 这真的很有趣。我以前从未遇到过这样的事情。

标签: java string types variable-assignment mismatch


【解决方案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 不是自动导入的,在我的情况下不是。在教程中导入它。
      猜你喜欢
      • 2015-12-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 2010-12-22
      相关资源
      最近更新 更多