默认覆盖处理程序

时间:2012-09-28 20:17:37

标签: java override

有没有办法定义一个可以处理任何未处理方法的默认或后备覆盖方法?

我问这个的原因是因为我已经创建了一个类来覆盖函数库中的一个不断变化的类。为了成功编译类,必须定义和覆盖所有方法,但是每次有更新时我都不想重新编写我的类。

以下是编写内容的示例:

public class CommandSignsPlayerProxy implements Player {

    private Player proxy;
    private boolean silent;

    public CommandSignsPlayerProxy(Player targetPlayer) {
        this.proxy = targetPlayer;
    }

    public boolean isSilent() {
        return silent;
    }

    public void setSilent(boolean silent) {
        this.silent = silent;
    }

    @Override
    public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details) {
        proxy.abandonConversation(conversation, details);
    }

    // This function is basically the only one that NEEDS overriding
    @Override
    public void sendMessage(String message) {
        if (!silent)
            proxy.sendMessage(message);
    }

    @Override
    public void setFlySpeed(float arg0) throws IllegalArgumentException {
        proxy.setFlySpeed(arg0);
    }

}

在实际代码中,还有50多个被覆盖的函数。那么有没有办法制作一个自动处理程序,用function_name()覆盖proxy.function_name()

1 个答案:

答案 0 :(得分:2)

Dynamic Proxy可能会这样做。来自文档:

  

动态代理类是实现接口列表的类   在运行时指定,以便通过其中一个方法调用   将对类的实例上的接口进行编码和分派   通过统一的界面到另一个对象。因此,一个动态代理   class可用于为列表创建类型安全的代理对象   接口,无需预先生成代理类,例如   与编译时工具一样。

     

动态代理类的实例上的方法调用是   调度到实例的调用处理程序中的单个方法,   它们使用java.lang.reflect.Method对象进行编码   标识被调用的方法和Object类型的数组   包含参数。