gpt4 book ai didi

java - 是否可以在所有情况下比较两个 .java 文件的方法和字段?

转载 作者:行者123 更新时间:2023-12-01 11:00:38 25 4
gpt4 key购买 nike

我目前正在参加项目管理类(class),教授布置了这项作业,以编程方式比较所有情况下的两个 .java 文件方法和字段。 我认为这实际上不可能但也许我错了!

分配规范如下(我知道它非常模糊)

In this assignment, you are required to write a comparison tool for two 
versions of a Java source file.
Your program takes as input two .java files representing those two versions
and reports the following atomic changes:

1. AM: Add a new method
2. DM: Delete a method
3. CM: Change the body of a method (note: you need to handle the case where a method is
relocated within the body of its class)
4. AF: Add a field
5. DF: Delete a field
6. CFI: Change the definition of an instance field initializer (including (i) adding an initialization to a
field, (ii) deleting an initialization of a field, (iii) making changes to the initialized value of a field,
and (iv) making changes to a field modifier, e.g., private to public)

这就是我正在使用的方法,我的方法是使用反射,因为它允许您执行所有操作,但检测方法主体中的差异。

我曾考虑过创建一个解析器的想法,但这似乎很荒谬,特别是对于项目管理方面的 3 学分本科生类(class)。 BeyondCompare 等工具不会列出更改的方法或字段,仅列出不同的行,因此不符合要求。

我交了这个作业,几乎整个类(class)都失败了,原因是“我们的代码不适用于具有未给出的外部依赖项的 java 文件或具有不同项目中的 java 文件” - 这是完全正确的,但是我也在想,不可能做到。

我正在尝试确定一个具体的答案,说明为什么这实际上不可能做到,或者了解为什么这是可能的新知识,因此任何见解都会很棒。

最佳答案

这里的错误是您已经开始检查 .class 文件(使用反射)。上面列出的一些信息在该阶段甚至不可用(泛型、内联功能)。您需要做的是将 .java 文件解析为文本。这是真正解决问题的唯一方法。一个非常高级的解决方案可能是编写一个程序:

  • 读取文件
  • 为每个 .java 文件构造一个特定对象,其中包含需要比较的所有信息(函数名称、实例变量名称等)
  • 比较构造的对象(例如:addedFunctions =functionsFromA.removeAll(functionsFromB))以提供请求的结果

注意:如果这是一项作业,您不应该使用其他人提供的解决方案,您需要自己完成。如果您使用其他人编写的库,您可能不会得到任何分数。

关于java - 是否可以在所有情况下比较两个 .java 文件的方法和字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33361385/

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