泛型类型的编译时错误



通常,在eclipse中,我可以运行代码而不会出现任何编译错误。然而,在ant文件中,我面对的是error: type argument Map is not within bounds of type-variable Type。我的蚂蚁文件有什么问题?

代码我取错了;

[javac] class StratI implements Strat<Map> {
[javac]                                      ^
[javac]   where T is a type-variable:
[javac]     T extends Map<?,?> declared in interface Strat
[javac] 1 error

Ant - javac部分;

<target name="compile"  depends="init">
        <javac  compiler="javac1.7"
                destdir="${build.dir}/classes"
                source="1.7"
                target="1.7"
                includeantruntime="false"
                encoding="ISO-8859-1">
                <src    path="${src.dir}" />
                <classpath refid="classpath" />
        </javac>
</target>

注意:我已经搜索谷歌这个错误。

您的课程Strat显然开始了

class Strat implements Strat<Map>

显然你不能有一个类实现自己(因为这是一个接口;看起来您有一个名称冲突)。此外,如果它没有被声明为具有参数,它就不能是泛型的。

既然你在不同的包中有一个泛型接口(根据你的注释,是的,它在不同的包中),你可以显式地对接口使用完整的包-例如,

package com.example.interface;
// A generic Strat interface
interface Strat<T> {
}

然后实现它(你可能应该选择一个更具描述性的名字-也许IStrat<T>) -

package com.example.impl;
class Strat implements com.example.interface.Strat<Map> {
}

或使用IStrat

class Strat implements IStrat<Map> {
}

你定义接口的方式是错误的。请阅读java文档。下面的代码可以帮上忙。

public interface Start<T> {
    public void display();
}
public class StartI implements Start<Map<String, String>> {
    @Override
    public void display() {
        System.out.println("Implement here");
    }
}

Map是一个raw类型,正如错误中所述,它不在类型变量Type的范围内,即T extends Map<?,?>。尽管您扩展了"take whatever"映射,但它仍然是原始类型的规范。

您应该更改StratI接口实现的声明:

class StratI implements Strat<Map<?,?>>

或者因为你扩展了

class StratI implements Strat<HashMap<?,?>>

或者yet因为它是一个实现

class StratI implements Strat<HashMap<Integer, String>>

编辑

Eclipse没有将其显示为错误是因为Eclipse没有显示未参数化的原始类型的编译错误。它会显示一个警告:

public interface myIn<T extends Map<?,?>>{
   void foo();
}
public class myClass implements myIn<Map>{
 @Override
 public void foo() {}
}

Eclipse将Map加下划线,警告:

Map是一个原始类型。对泛型类型Map<K,V>的引用应该是参数化的

相关内容

  • 没有找到相关文章

最新更新