使用java泛型扩展接口还是糟糕的设计?
<>我还是java世界的新手(C++程序员)。我设计了一个接口层次结构来强制我的实现@Override接口中的方法。现在,我正在学习“如何在java中实现这一点”。所有波纹管都是接口XMLDecoder HTTPDecoder
| |
------------------
|
SSODecoder UserStuff
| |
-----------------------------
|
|
SSOBinding
|
|
Assertion
有趣的是,我有一个实现SSOBinding的对象和另一个实现断言的对象。我的问题是必须在XMLDecoder和HTTPDecoder中实现每个方法。我相信我有一些漂亮的设计,但为此:(
Java泛型可以帮助我解决这个问题吗?比如:
Assertion<XMLDecoder> anAssertion = new Assertion<XMLDecoder>();
anAssertion.OnlyMethodsInXMLDecoder();
至少这是我现在能想到的,但在实现这一点上没有任何成功
非常感谢
编辑1
对不起,我解释得不好
层次结构不是颠倒的(顶部是基础)
这是我的问题。我知道它可能需要XMLDecoder或HTTPDecoder。忘了你的绑定吧。所以我可以有一个实现:
class AssertionImpl1 implements Assertion {
// Only implementing XMLDecoder
}
class AssertionImpl2 implements Assertion {
// Only implementing HTTPDecoder
}
唯一不同的是它们需要为解码器实现的方法
# 1 楼答案
简短的回答是:没有
我猜你的继承树搞错了:如果不是所有SSODecker实例都需要实现HTTPDecoder和XMLDecoder中的方法,那么SSODecker不是两者的子接口
您应该研究另一种设计,其中HTTPDecoder和XMLDecoder是SSO解码器使用的策略。强迫他们有相同的接口,并让他们。。。不管他们有什么责任
这样,你的电话就会是这样的:
# 2 楼答案
我不确定你的“扩展”关系朝哪个方向发展,但是如果}中的每个方法
Assertion
扩展SSOBinding
,SSOBinding
扩展SSODecoder
和SSODecoder
扩展XMLDecoder
和HTTPDecoder
,那么如果两个对象分别实现了SSOBinding
和Assertion
,它们都将实现XMLDecoder
和^