我在netbeans中遇到了这个编译错误:
不兼容的类型 必需:字符串 发现:java.lang.String
我有点迷失为什么会这样?
代码:
private class StringIterator<String> implements Iterator<String> {
private Iterator<Entry<K, byte[]>> i = internalMap.entrySet().iterator();
@Override
public boolean hasNext() {
return i.hasNext();
}
@Override
public String next() {
return decompress(i.next().getValue());// error on this line
}
@Override
public void remove() {
i.remove();
}
}
答案 0 :(得分:18)
您应该从StringIterator类中删除type参数。这导致编译器将类中任何出现的String视为泛型类型而不是java.lang.String。
private class StringIterator implements Iterator<String> {
答案 1 :(得分:1)
你的进口是什么?您是否导入了“错误的”String
?另外,decompress
是什么?
更新:请参阅其他回复,其中有正确答案。您将通用名称命名为“String”。删除不使用的通用。
答案 2 :(得分:1)
什么是解压缩?如果它是一个方法,那么它也必须返回String。
答案 3 :(得分:0)
我想提供另一种可能发生这种情况的情况,因为它让我感到困惑了一段时间。 gkamal所说的解决方案是正确的。
就我而言,我有以下内容:
public class NodeLabelTransformer<V, String> implements Transformer<V, String>
{
....
}
但我收到了错误。
@Override
public String transform(V s)
{
StringBuilder label;
label = new StringBuilder();
label.append("MyLabelText");
return (label.toString());
}
在这种情况下,解决方案是我的类应声明为:
public class NodeLabelTransformer<V> implements Transformer<V, String>
{
我只想指出,Transformer接口的参数仍然相同,但我的类声明不同。
答案 4 :(得分:0)
在大多数情况下,如果您的导入不包含 import java.lang.String ,则会出现此错误。