java - 在java中执行同一类的函数“在每个”方法之前
问题描述
我在一个类中有几个方法需要将布尔值设置为 true 才能正确执行。
我可以在每种方法中编写if
语句,但是如果我或其他人想要添加另一种方法,则不方便。我或他可能会忘记支票。
java中有没有办法在类中的其他方法之前执行一个方法(就像JUnit一样@BeforeEach
)?
编辑:提出了许多非常有趣的技术/答案/概念。当我了解他们时,我会与他们联系。谢谢。
解决方案
让我们创建一个turnBooleanTrue()
有效地boolean
设置为 true 的方法,以便正确执行该方法。
然后,您可以编写自己的InvocationHandler来拦截对您的对象的调用,然后反射性地(使用反射 API)首先调用turnBooleanTrue()
方法,然后调用被调用的方法。
看起来像这样
public class MyClassInvocationHandler implements InvocationHandler {
// initiate an instance of the class
MyClass myClass = new MyClassImpl();
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// look up turnBooleanTrue() method
Method turnBooleanTrue = myClass.getClass().getMethod("turnBooleanTrue");
// invoke the method
turnBooleanTrue.invoke(...); // toggle the boolean
// invoke the method to which the call was made
// pass in instance of class
Object returnObj = method.invoke(myClass, args);
return returnObj;
}
编辑
添加了一些行来MyClass
初始化对象。您需要一些东西来调用方法并维护状态。在上面的代码示例中更改util
为myClass
。
推荐阅读
- android - RecylerView 的 onScrollChanged() 在 Android 中未检测到屏幕底部
- android - 如何从我的 Android 应用程序中直接撰写推文?
- java - 多对多关系Hibernate的错误实现?
- python - 带有 timeweb.ru 的 Django 2 Sendmail
- android - 位图大小 > 0,但识别的文本块大小 = 0
- macos - 在 macOS 上调用 pthread_cond_destroy 导致“功能未实现”ENOSYS
- google-cloud-platform - 使用 myfile.FLAC 使用 PHP“无效音频通道计数”的 Google Speech API
- elasticsearch - ELK索引设计根据发展目标
- ios - 处理标头中泄漏的 OAuth 令牌 - iOS WKWebView
- typescript - Typescript 中联合类型的好处是什么