[英]Java Extending Final Classes
我想覆盖第三方,开源决赛类的非最终方法。
final class A
{
void put(obj a)
{...}
obj get()
{...}
}
请告诉我如何覆盖get()
和put()
方法,但仍保留此类的其他行为和功能。
它是开源的:分叉它,并使该类非最终。
如果不将其作为非最终版,您将无法扩展它。
如果您的类具有定义了put和get方法的已定义接口,那么您可能希望尝试代理该类。
最简单的方法是创建这样的东西:
public interface CommonInterface {
void put(); Object get();
}
final class A implements CommonInterface
{
void put(obj a)
{...}
obj get()
{...}
}
public class ProxyToA implements CommonInterface{
private A a;
void put(Object a){
// your override functionality
}
Object get(){
// same here
}
void otherAStuff(){
a.otherAStuff();
}
}
然后只需使用CommonInterface并代理您的对象。 或者您可以使用JDK代理,javassist等。
你不能延长final
课程。 根据Java规范。
你一定要试着找出为什么课程是最终的。 如果你能够说服自己可以做到这一点,另一个选择是使用AspectJ来改变这两种方法的行为。
AspectJ允许您修改特定方法的行为。 即使对于private
方法(安全性约束允许),它也可以这样做,并且可以访问和分配类的私有字段。
简短的回答是,您无法覆盖这些方法,因为您无法扩展该类。 你有什么打算通过覆盖来获取get和put方法? 如果您要为这些方法添加一些功能,可以创建另一个包含此类的类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.