当前位置: 首页 > 面试题库 >

记录一个类的所有属性更改

彭弘伟
2023-03-14
问题内容

出于调试目的,我需要跟踪Class属性更改。

例如,考虑以下类别:

class Test {
    int myInt;
    String myString;
    ...

    public void setMyInt(int a) ...
    public void setMyString(String s) ...

    public printDebugLog();
}

void main() {
    Test t = new Test();
    t.setMyInt(5);
    t.setMyString("Hello");
    t.printDebugLog();
}

我想输出的是这样的:

myInt => 5
myString => Hello

简单的解决方案是立即创建日志。即添加如下Log功能:

void Log(String s) {
    System.out.println(s);
}

然后编写如下所示的 set 函数:

void setMyString(String s) {
    myString = s;
    Log("myString => " + s);
}

这就要求所有 设置的 函数必须以不同的方式编写,我想知道是否有 更好的
解决方案。例如,创建一个SetValue接受两个变量并将第一个属性设置为第二个对象的值的函数可能更容易(如果可能)。或类似的东西。

任何想法?


问题答案:

为此,您应该使用执行日志记录的正交代码包装您的类。

由于您的类未实现接口,因此无法使用动态代理,因此您必须使用使用字节码工程的解决方案之一。

我知道最强大的解决方案是AspectJ。但是也许您甚至不需要它。您可以使用Javassist或CGLIb(字节代码工程库),它们允许创建用于包装类的代理,因此您可以添加执行日志记录的代码。



 类似资料:
  • 问题内容: 我正在NHibernate中对单个属性执行标准更新。但是,在提交事务时,sql更新似乎设置了我映射到表上的所有字段,即使它们没有更改。当然这不是Nhibernate中的正常行为吗?难道我做错了什么?谢谢 问题答案: 这是正常现象。您可以尝试添加到类定义中以覆盖此行为。

  • 问题内容: 我有一个动物类,具有几个属性,例如: 我现在想将所有这些属性打印到文本文件中。我现在做的丑陋方式是: 有没有更好的Pythonic方式可以做到这一点? 问题答案: 在这种简单情况下,您可以使用: 如果要将Python对象存储在磁盘上,则应查看一下货架- Python对象持久性 。

  • 问题内容: 因此,我最近开始涉足OOP,到目前为止一切进展顺利。虽然我本身没有任何问题,但我希望有一个令人惊奇的功能,尽管我找不到关于该功能的任何文档。 在为对象分配属性时,我经常发现我必须更改依赖于他人的属性,例如光明与黑暗。这是一个例子: 现在,尽管这很酷,但我想要的是相同的过程,但是如果一个属性发生更改,则在同一对象内。如果我重置光的属性(是的),我希望黑暗相应地增加/减少。如果可以更改光的

  • 出身背景 我使用的是Postsharp版本3.0.42.9,并创建了一个自定义跟踪器属性(

  • 问题内容: 假设我有一张桌子,我用symfony按字母顺序排序。每个项目都有一个相当随机的ID,我想在某个ID之后检索所有项目。例如: 假设我想检索和。我事先知道ID 3,并且想要它之后的所有内容。 我应该如何构造语句来实现这一目标? 我不在乎答案是否使用Propel,MySQL,SQL或其他。只要有可能。 问题答案: (至少与Postgres和Just Aguy的SQL Fiddle一起运行)

  • 问题内容: 我正在写一个轻量级的类,其属性旨在可公开访问,并且有时仅在特定的实例中被覆盖。就此而言,Python语言中没有为类属性或任何类型的属性创建文档字符串的规定。记录这些属性的预期方式和受支持方式是什么?目前,我正在做这种事情: 这将导致该类的docstring包含初始的标准docstring部分,以及通过对的扩展分配为每个属性添加的行。 尽管在文档字符串样式指南中似乎并未明确禁止使用这种样