Java 泛型类型的编译时错误
通常,在eclipse中,我可以在没有编译错误的情况下运行代码。然而,对于ant文件,我遇到了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
错误:类型参数映射不在类型变量类型的范围内。我的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");
}
}