【发布时间】:2020-11-28 05:47:20
【问题描述】:
要实现的接口:
public interface Message {
}
public interface Handles<T extends Message> {
void hanlde(T message);
}
具体实现:
public class EnforcementHandler<T extends Handles<T extends Message>> {
}
意外绑定
这种模式在 Java 中是否可行?
【问题讨论】:
-
public class EnforcementHandler<T extends Handles<T> & Message> {如果你想让T实现Message和Handles<T>。 -
嗨@Turing85。没有冒犯的意思。你的提议是行不通的。 OP 的
Handles是使用只有一个边界的类型参数声明的:Message。您正在声明EnforcementHandler的类型参数T有两个边界:Handles和Message。使用既实现Handles又实现Message— 如您所定义的T extends Handles<T> & Message。 See for yourself with an experiment I did. -
@deduper 在我提供的评论中,
T的具体实现(即代码中的HandlesMessage)必须同时实现Handle<T>和Message。尽管这种方法非常值得怀疑,因为这两个实现应该分为两个类(因为它基本上说HandlesMessage自己处理......),这是我推断出的 OP 想要的。我不推荐使用这种方法,而是it would work in theory。由于我不推荐这种方法并且@Louis 的答案已经存在(而且更干净),我只是将其发布为评论。 -
@deduper 谢谢你的回答。我正在使用遵循自定义界面的函数构建一个基本的复合模式。在这种情况下,自定义界面可能是 Consumer
,但 Louis 提供的答案正是我想要做的。 -
„...它基本上说 HandlesMessage 自己处理...这是我推断 OP 想要的...“ - 你介意我问你吗对于您在推断这种安排时设想的特定用例,@Turing85?那将是非常有教育意义的。 TIA。
标签: java generics javacompiler