2

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

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

以下是所写内容的示例:

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()

4

1 回答 1

2

动态代理可能能够做到这一点。从文档中:

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

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

于 2012-09-28T20:22:54.133 回答