我想装饰接口PreparedStatement,以便自定义关闭它(只是一个例子)。
这意味着我想装饰 的现有实例PreparedStatement
,从而在调用其他代码时close()
调用它。
为此,我需要默认实现装饰器的所有数十种方法,PreparedStatement
只是为了将调用委托给内部对象,就像在此处完成的那样。缺点是它只是大量的工作和代码,几乎没有附加价值。
另一种选择是尝试使用 Java 的Proxy 和 InvocationHandler以提供默认实现,该实现在单个方法中为所有方法执行委托。如果存在自定义方法,则InvocationHandler会将调用定向到该方法。请参见此处的示例。此解决方案的问题是无法将自定义方法标记为@Override
并且无法检查其签名的正确性,因为它需要一个 abstract PreparedStatement
,代理将无法实例化它。
那么,这可以做到吗?如何?
* 必须能够使用 Java 7 max 来实现,但请随时提供 Java 8 答案。