我对 Java 世界还是个新手(前 C++ 程序员)。我设计了一个接口(interface)层次结构来强制我的实现 @Override 接口(interface)中的方法。现在我正在思考“如何在java中做到这一点”。以下均为接口(interface)。
XMLDecoder HTTPDecoder
| |
------------------
|
SSODecoder UserStuff
| |
-----------------------------
|
|
SSOBinding
|
|
Assertion
现在有趣的部分是我有一个实现 SSOBinding 的对象和另一个实现断言的对象。我的问题是必须实现 XMLDecoder 和 HTTPDecoder 中的每个方法。我相信我有一些漂亮的设计,但为此:(
Java 泛型可以帮我解决这个问题吗?像这样的东西:
Assertion<XMLDecoder> anAssertion = new Assertion<XMLDecoder>();
anAssertion.OnlyMethodsInXMLDecoder();
至少这是我目前能想到的,但在实现上没有取得任何成功。
非常感谢!
编辑1
抱歉我的解释不好。
层次结构不是颠倒的(顶部是基础)。
SSODecoder 是我的问题。我知道它可以有 require XMLDecoder 或 HTTPDecoder。忘记 SSOBinding。所以我可以有一个实现:
class AssertionImpl1 implements Assertion {
// Only implementing XMLDecoder
}
class AssertionImpl2 implements Assertion {
// Only implementing HTTPDecoder
}
它们的唯一区别是它们需要为解码器实现的方法。
最佳答案
简短回答:否。
我猜您的继承树是错误的:如果不是所有 SSODecoder 实例都需要实现 HTTPDecoder 和 XMLDecoder 中的方法,那么 SSODecoder 就不是两者的子接口(interface)。
您应该研究替代设计,其中 HTTPDecoder 和 XMLDecoder 是 SSODecoder 使用的策略。强制它们具有相同的接口(interface),并使 SSODecoder 委托(delegate)给它们......无论它们承担什么责任。
这样,您的调用将类似于:
Assertion anAssertion=new Assertion(new XMLDecoder());
关于java - 使用java泛型来扩展接口(interface)还是只是糟糕的设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5344507/