繁体   English   中英

Java扩展最终类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM