[英]Is it possible to compare two .java files methods and fields in all cases?
我目前正在上一个项目管理班,教授给了这个作业,以编程方式比较了所有情况下的两种.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个学分的本科生类。 诸如BeyondCompare之类的工具不会列出更改的方法或字段,仅列出不同的行,因此不符合要求。
我上交了这个作业,几乎整个类都因为它的原因而失败了,原因是“我们的代码不适用于没有给出外部依存关系的Java文件或不同项目中的Java文件”-完全正确,但是我我在想,不可能做。
我试图确定一个具体的答案,说明为什么实际上不可能做到这一点,或者要学到一些新的知识来了解为什么这样做是可能的,所以任何见解都会很棒。
您在这里出错的是,您已经开始检查.class文件(使用反射)。 上面列出的某些信息在该阶段甚至不可用(泛型,内联函数)。 您需要做的是将.java文件解析为文本。 这是真正解决问题的唯一方法。 一个非常高级的解决方案可能是编写一个程序,该程序:
注意:如果这是一项任务,则不应使用任何人提供的解决方案,而需要自己完成。 如果使用其他人编写的库,则可能不会获得任何分数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.