是否有一种方法可以使每次调用方法时都会被调用的“超级方法”,即使对于未定义的方法也是如此?有点像这样:
public void onStart() {
System.out.println("Start");
}
public void onEnd() {
System.out.println("End");
}
public SuperMethod superMethod() {
System.out.println("Super");
}
// "Start"
// "Super"
onStart();
// "End"
// "Super"
onEnd();
// "Super"
onRun();
编辑-
细节:我有一个库,该库进行了很多更新,并且每次更新都变得晦涩难懂。为了简化我的工作流程,我正在使程序自动更新库(需要执行我想做的事情,我不会具体说明原因,但是我的程序可以与将来的更新一起使用)并且我有混淆映射与库一起下载时,我想制作一种Library
例如称为的代理,然后在我调用Library.getInstance()
它时,将获得混淆映射getInstance()
并调用库的方法,getInstance()
或者abz
将其映射到当前时间。
这是使用Proxy类的纯Java实现:
import java.lang.reflect.*;
import java.util.*;
public class Demo
{
public static void main(String[] args)
{
Map<String, String> map = new HashMap<String, String>();
map.put("onStart", "abc");
map.put("onEnd", "def");
Library library = new LibraryProxy(map, new LibraryImpl()).proxy();
library.onStart();
library.onEnd();
library.onRun();
}
}
interface Library
{
void onStart();
void onEnd();
void onRun();
}
class LibraryImpl
{
public void abc() { System.out.println("Start"); }
public void def() { System.out.println("End"); }
}
class LibraryProxy implements InvocationHandler
{
Map<String, String> map;
Object impl;
public LibraryProxy(Map<String, String> map, Object impl)
{
this.map = map;
this.impl = impl;
}
public Library proxy()
{
return (Library) Proxy.newProxyInstance(Library.class.getClassLoader(),
new Class[] { Library.class }, this);
}
@Override
public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
{
Object res = null;
String name = map.get(m.getName());
if (name == null) {
System.out.println("[" + m.getName() + " is not defined]");
} else {
m = impl.getClass().getMethod(name, m.getParameterTypes());
res = m.invoke(impl, args);
}
System.out.println("super duper");
return res;
}
}
输出:
Start
super duper
End
super duper
[onRun is not defined]
super duper
主课 工具类 考试班 输出: 我试图嘲笑util无效的方法调用与do没什么,但不工作。有人能帮我解决吗?我在我们的应用程序中遇到了类似的功能。
每个java对象都有一个内置锁。因此,如果许多线程中的一个想要调用同步方法,它会获取对象的锁。 所以我们假设我们有一个对象和两个线程,t1和t2。 t1线程请求对象的锁来调用同步方法object.methodA()。同时t2请求对象的锁来调用同步方法object.methodB()。 这能做到吗? 两个线程是否可以获取两种不同方法的锁?(想象一个理想的场景,其中methodA()和methodB(
问题内容: 我在一个教程中找到了这个示例。 当我运行此程序时,我的hs.size()值为2 ..,并且equals方法仅被调用一次。有人解释了我何时在HashSet中调用equal()方法 当上述程序中的equal方法调用时 问题答案: 您的代码将调用的唯一一次。另一次调用方法将是对的类。 此答案说明何时由和何时调用方法。摘录: HashSet利用哈希码来加快处理速度。假定彼此相等的两个对象将具有
问题内容: 我正在做作业,遇到了一些错误。在一个类中,我有此方法: 现在,我收到错误消息“无法从静态上下文中引用非静态方法…”,因此我将getPoints()设置为静态方法,并将变量也设置为静态,并且它可以正常工作。但是在另一种打印对象的方法中,它不起作用(我相信是由于static关键字)。 所以我的问题是,有没有一种方法可以在不创建第二个Class实例的情况下调用方法?这是我所拥有的一般构想代码
所以我肯定有类似的东西在那里,但我已经搜索了一个小时,还没有找到确切的我要找的东西。假设我有一个这样的类: 我该如何制作这样的作品?
但是当我的method2被调用时,AOP功能没有被调用,即没有调用AOPLogger类的checkAccess方法。 我错过什么了吗?