Java Generics:不兼容的类型必需String;发现:java.lang.String

时间:2011-12-09 10:05:49

标签: java generics

我在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();
    }
}

5 个答案:

答案 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 ,则会出现此错误。