问题描述
/** Never change *a line* of this or some angry monster will fall from the opening skies talking obscure reasons not to mess with this */
public interface IllFindStuffNoworries<STUFF> {
STUFF findById(String id);
STUFF findById(Long id);
STUFF findById(UUID id);
... and so on
}
(这很不方便,因为我不知道它期望什么类型的 id
)
但事实证明,该项目的所有 STUFF
都有一个方法 getId()
,该方法返回与实现相关的 IllFindStuffNoworries
愿意处理的类型之一。
所以我介绍了一个:
public interface IveGotId<ID> { ID getId(); }
现在由我所有的 STUFF
-s 扩展,允许我介绍:
public interface TypicalFinder<STUFF extends IveGotId<ID>,ID> { //get it ? typical because types ... ha ha that sounded hilarIoUs in my head ...
STUFF findById(ID id);
}
所以我有一个 Something
SomethingFinder
,我修改了它:
/** Change as little as you can there */
public class Something {
...
String getId(){ return id; }
...
}
public interface SomethingFinder extends IllFindStuffNoworries<Something> {}
致:
/** Change as little as you can there */
public class Something implements IveGotId<String> {
...
@Override String getId(){ return id; }
...
}
public interface SomethingFinder extends IllFindStuffNoworries<Something>,TypicalFinder<Something,String> {}
虽然这在 java 7- 中会很好(根据多年的记忆),但用 java8(+?) 编译它会产生这个:
/home/stackOverflowUserAr3s/projects/hot-mess/src/main/java/some/where/impl/SomethingFinderImpl.java:12:42
java: reference to findById is ambiguous
both method findById(ID) in new.mess.TypicalFinder
and method findById(java.lang.String) in old.mess.IllFindStuffNoworries
match
有没有办法让这个工作?
我是否试图依赖过时的想法?@FunctionnalInterface
-s 在我的情况下是一种方法吗(只是我感兴趣的一种方法)?
这些是接口,由接口扩展......这不是多个实现的一些时髦意图,而是方便地重叠并且可以通过单个实现满足的契约的结合。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)