当前位置: 代码迷 >> java >> 如何在Java中实现对象代理或类代理?
  详细解决方案

如何在Java中实现对象代理或类代理?

热度:85   发布时间:2023-07-27 09:17:42.0

我需要在项目中扩展.class文件,并且需要覆盖一个简单的方法。 考虑我有A类,它在某个.jar包中。现在我想重写AI类的test()方法是通过创建A的子类B并重写它来实现的。 现在在我的应用程序包中(它是.jar),为类A创建了对象。此对象调用类A的方法。但是我想调用类B的方法。

我的想法是代理整个应用程序中的对象创建。 每当在那时创建类A的obj时,我都希望进行一些配置以创建类B的对象并移交给类A的启动器。

请有人帮助我实施这种机制。

仅当构造函数为private时,才可以阻止或控制类的实例化。

如果您不能覆盖原始基类并希望代理它,则需要一个工厂并建议程序员使用该工厂,而不是直接调用基类的构造函数。

在工厂代码中,您可以返回作为基类代理的子类。

请记住,这只是一个建议。 您不能阻止程序员使用公共构造函数手动创建类的实例。

以下是一种简单的方法(使用类型转换),通过它我们可以使用Parent类对象来调用Child类方法:

package testA;

public class A 
{

    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
    }

    public String aMethod(){
        System.out.println("Calling aMethod");
        return "aMethod";
    }
}



package testB;
import testA.*;

public class B extends A
{

    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
        A aClass = new B();
        aClass.aMethod();
        ((B)aClass).bMethod();
    }

    public String bMethod(){
        System.out.println("calling B method");
        return "bMethod";
    }
}
  相关解决方案