【发布时间】:2017-12-09 21:26:27
【问题描述】:
我有两个类如下
类查询结果:
public class QueryResult
{
...
public static List sortResults(boolean ascending, List<QueryResult> toSort)
{ ...
}
}
和类CaseResult:
public class CaseResult extends QueryResult
{
...
public static List sortResults(boolean ascending, List<CaseResult> toSort)
{ ...
}
}
我收到以下错误:
名称冲突:类型的方法 sortResults(boolean, List) CaseResult 与 sortResults(boolean, List) 类型为 QueryResult 但不隐藏 它是 CaseResult.java
我尝试了类似问题Java generics name clash , has the same erasure 下的答案,但出现了更多错误。我想我可能会误解某些东西,或者这些答案不适合我的情况。
有人可以提供任何解决方案或解释更多以帮助我理解吗?谢谢大家。
【问题讨论】:
-
解决方案是为方法使用不同的名称,问题是您提供的
static方法在类型擦除后具有相同的签名,因此在编译时无法选择CaseResult.sortResults(...)实现,或者更确切地说,即使可能,编译器也不是为了找到正确的实现而设计的,请检查:stackoverflow.com/questions/14002965/… -
尝试使用 super() stackoverflow.com/questions/3767365/super-in-java
-
感谢您的解释,@Jack。它是一个从网站下载的大型开源框架,因此在我的情况下,重命名方法可能会弄乱整个系统。如果找不到其他解决方案,我会尝试重命名。
-
@KenrySanchez,我尝试在 CaseResult 下的 sortResults 函数中添加 super(),但没有成功。也许我用错了。你能解释一下吗?谢谢。
标签: java generics inheritance compiler-errors name-clash