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”作为泛型类型的名称来创建泛型类。泛型类型的作用是每当您从该类创建一个对象时,它会将 <>
中的任何内容替换为新类型。
因此,在您的班级中,如果您创建了Tree<Integer>
,那么您班级中的“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