运行时类是否在Java中实现接口?
假设我有这样的课程:
class A
{
}
无论如何,我都可以使类implements
成为运行时上的接口
这就是我试图实现的,当有人创建类A
的对象时,我需要拦截对该对象的调用
非常熟悉Java,谢谢
你可以在下面搜索框中键入要查询的问题!
假设我有这样的课程:
class A
{
}
无论如何,我都可以使类implements
成为运行时上的接口
这就是我试图实现的,当有人创建类A
的对象时,我需要拦截对该对象的调用
非常熟悉Java,谢谢
# 1 楼答案
你可以用Instrumentation来实现这一点,但是我不会这么做,除非你非常了解Java和字节码,而且真的没有其他选择
更好的选择是使用组合或继承
B或C实现你的接口而不必改变A
# 2 楼答案
可以使用
Proxy
对象在运行时调整任何对象,使其看起来好像实现了一个接口有一篇很好的文章here讨论了一种工厂方法,用于对对象执行此操作
本质上,Proxy对象可以通过拦截对对象的所有方法调用并动态重定向来包装对象
# 3 楼答案
这应该可以通过适配器解决。定义一个实现接口并委托给真实对象的其他类:
现在,给定一个需要
YourInterface
和类型为YourClass的对象的方法:第二种方式: 使用代理类:
请参阅this链接
的Example使用动态代理动态实现接口
# 4 楼答案
不能使类在运行时实现接口。在运行时可以做的最好的事情就是为类创建一个动态的子类,它还实现了一个接口
根据Liskov替换原则,这个解决方案将非常有效,因为针对类型
A
编写的任何代码也将针对其子类型。此外,针对您正在实现的接口编写的任何代码也可以工作,并且能够访问在类A
中实现的行为,在一定程度上,这种行为通过接口方法的行为反映出来