这个问题已经在这里有了答案: > Java – Method name collision in interface implementation 7个
不久我遇到了一个奇怪的地方,我无法向自己解释.现实世界中的问题已经解决,我只是好奇是否找到了令人满意的答案.
想象一下,您必须编写一个类,该类从您正在使用的某些框架中实现以下接口:
interface Interface1 {
String method();
}
到现在为止还挺好.现在介绍第二个框架,如果您的类将实现第二个接口,它将非常有用:
interface Interface2 {
Long method();
}
这就是出现问题的地方:
class ThatsTheProblem implements Interface1, Interface2 {
public ???? method() {
// ...
}
}
有任何想法吗?
仅供参考:实际问题基于抽象的dao模式,其中某些实体具有Long id,其他实体具有UUID id.
解决方法:
简短的答案:您不能.
您可以做的是提供一个实现一个或另一个接口的视图.例如:
public class OnePossibleSolution { // no "implements"
private String interface1Method() {
return "whatever";
}
public Interface1 asInterface1() {
return new Interface1() {
@Override
String method() {
return interface1Method();
}
}
}
// ditto for Interface2...
这可能是解决问题的最惯用的Java方法.例如,当您要迭代其元素时,这就是Map所做的.与其尝试解决成为可迭代的K的问题,不如解决可迭代的V的问题.和Iterable< Map.Entry< K,V>> ;,它提供了三个视图:
> keySet()
> values()
> entrySet()
这些中的每一个返回各自的集合,该集合实现适当的Iterable….接口.
标签:interface,java
来源: https://codeday.me/bug/20191029/1959751.html