Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泛型类型的编译时错误_Java_Eclipse_Ant_Javac - Fatal编程技术网

Java 泛型类型的编译时错误

Java 泛型类型的编译时错误,java,eclipse,ant,javac,Java,Eclipse,Ant,Javac,通常,在eclipse中,我可以在没有编译错误的情况下运行代码。然而,对于ant文件,我遇到了错误:类型参数映射不在类型变量类型的范围内。我的ant文件有什么问题 代码我拿错了 [javac] class StratI implements Strat<Map> { [javac] ^ [javac] where T is a type-variable: [javac] T extends Map

通常,在eclipse中,我可以在没有编译错误的情况下运行代码。然而,对于ant文件,我遇到了
错误:类型参数映射不在类型变量类型的范围内。我的ant文件有什么问题

代码我拿错了

[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
[javac]类StratI实现Strat{
[javac]^
[javac]其中T是一个类型变量:
[javac]T扩展接口Strat中声明的映射
[javac]1错误
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>
Map是一个,如错误中所述,它是
T extends Map
。尽管您正在扩展一个“随便拿什么”的Map,但它仍然是一个原始类型的规范

您应该在以下位置更改
StratI
接口实现的声明:

class StratI implements Strat<Map<?,?>>
类StratI实现Strat>{
void foo();
}
公共类myClass实现了myIn{
@凌驾
公共void foo(){}
}
Eclipse将在
Map
下面加下划线,并显示警告:

Map
是原始类型。对泛型类型
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");
    }

}
公共接口启动{
公共空间显示();
}
公共类StartI实现Start{
@凌驾
公共空间显示(){
System.out.println(“在此处实现”);
}
}

您通常不会实现泛型。@Reimeus是的,它是不同的package@PaulBastide“不要”是什么意思?我是否从未实现过泛型!?不使用原始类型
Map
和指定参数类型可能会有所帮助。您是否尝试过使用类型变量
Strat
实现
StratI
?例如
类StratI实现Strat
。这是因为Map是原始类型。否,Strat的签名是
公共接口StratTo您指的是哪个
Strat
?在您的问题中,它清楚地说明了
类Strat实现Strat
,这里Elliott指的是它。代码使用内置的eclipse运行方法运行;但是,使用ant时,它会发出编译错误
class Strat implements IStrat<Map> {
}
class StratI implements Strat<Map<?,?>>
class StratI implements Strat<HashMap<?,?>>
class StratI implements Strat<HashMap<Integer, String>>
public interface myIn<T extends Map<?,?>>{
   void foo();
}

public class myClass implements myIn<Map>{
 @Override
 public void foo() {}

}
public interface Start<T> {
    public void display();
}

public class StartI implements Start<Map<String, String>> {

    @Override
    public void display() {
        System.out.println("Implement here");
    }

}