gpt4 book ai didi

java - 在编译/运行时替换 Java 类型

转载 作者:行者123 更新时间:2023-12-02 00:04:36 25 4
gpt4 key购买 nike

我有一个要替换的类型列表,用于日志记录目的,但不更改我的代码(日志记录部分只是偶尔使用)。我正在寻找一种简单的方法来为我的类字段创建某种代理,以便在运行时知道我的类字段何时更改,或者当我没有类源代码(例如 LinkedList)时,当调用类方法时。

举个例子,如果我有这个代码,它是属于我的一个类,我只需要收到有关 MyClass 字段状态更改的警告:

public class MyClass {

private LinkedList<Integer> myList;

private int myInteger;

public void myMethod()
{
myInteger = 15;
myList = new LinkedList<Integer>();
}

public void myOtherMethod()
{
myList.add(1);
}

public LinkedList<Integer> getMyList() {
return myList;
}
}

我需要知道,在运行时(但代码修改可以在编译时完成),每次有人更改 myInteger 的值时,都会向 myList 添加一个元素code> 并更改 myList 引用的 LinkedList。我认为解决方案不应该完全通过代码分析来完成,因为列表引用可以通过参数传递到任何地方,例如 getMyList()

在这种情况下,日志记录仅针对字段,无论它们是原始字段还是对象。对于我没有代码的类型(例如 LinkedList),如果在调用某个方法或读取或写入任何公共(public)字段时收到通知,我会很高兴。

最佳答案

您可能可以使用 AspectJ 来连接这些事件...请参阅 pointcuts了解何时可以挂接的信息。

或者您使用 CGLib 或任何其他字节码库在加载时修改字节码并注入(inject)额外的逻辑,例如增加访问计数器或类似的字段访问逻辑。

或者你扩展Lombok编织所需的代码。 (我发现这比修改纯 java 字节码更容易)。这将是编译时

关于java - 在编译/运行时替换 Java 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122495/

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