gpt4 book ai didi

java - 在 Java 中调用该类的任何方法之前调用方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:09 25 4
gpt4 key购买 nike

有没有一种方法可以在每次调用该类的任何方法时都执行该类中的方法。

我将在这里简要介绍一下我的场景:

Class Util{

private isConnected(){
if(!xxxapi.connected())
throw new MyException(....)
}
public createFile(){....}
public removeFile(){....}
}

因此,无论何时调用 new Util.createFile(),我都希望在 createFile() 实际启动之前调用 isConnected()。 显然我每次都可以在每个方法的开头调用isConnected(),但我想知道是否可以有其他解决方案。

对于这种情况还有其他建议/解决方案吗?

最佳答案

您应该编写一个 InvocationHandler ( http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/InvocationHandler.html ) 来拦截对您的对象的调用,然后以反射方式(使用反射 API)首先调用 isConnected() 方法然后是调用的方法。

样本:实用接口(interface):

public interface Util {

void isConnected();

void createFile();

void removeFile();

}

Util 调用处理程序:

public class UtilInvocationHandler implements InvocationHandler {

private Util util = new UtilImpl();

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {

// look up isConnectedMethod
Method isConnectedMethod = util.getClass().getMethod("isConnected");

// invoke the method
isConnectedMethod.invoke(util);

// process result of the above call here

// invoke the method to which the call was made
Object returnObj = method.invoke(util, args);

return returnObj;
}

private static class UtilImpl implements Util {
public void isConnected(){
System.out.println("isConnected()");
}

public void createFile(){
System.out.println("createFile()");
}

public void removeFile(){
System.out.println("removeFile()");
}
}
}

对象初始化:

    Util util = (Util) Proxy.newProxyInstance(
Util.class.getClassLoader(),
new Class[] {Util.class},
new UtilInvocationHandler());

关于java - 在 Java 中调用该类的任何方法之前调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39369767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com