【发布时间】:2019-01-20 16:13:40
【问题描述】:
假设我有两个包(package1,package2),每个包中有一个类(package1.A,package2.B)。我需要使用 java 程序识别从 package1.A 到 package2.B 的引用,反之亦然,并且还需要引用每个类中的任何方法。
代码是这样的:
package package1;
public class A{
public A(){
Class<?> clazz = Class.forName("package2.B");
Method mthd = clazz.getMethod("someMethod", Integer.TYPE);
}
public static void main(String[] args) {
new A();
}
B类是这样的:
package package2;
public class B {
public B someMethod(int someParam) {
return null;
}
}
我只需要一些关于我应该如何开始使用解析器来解决这个问题的指示。我必须记住什么样的规则?我的问题的目标是识别依赖关系。
【问题讨论】:
-
您几乎需要为 Java 编写一个完整的解析器。而且您需要遍历每个源代码文件的解析树,识别每个表达式的类型以查看它是否与您要查找的类匹配。
-
请非常准确地了解我们在这里谈论的元级别。您是否有一个程序试图在其自己的代码中查找对某个类的引用?您是否正在尝试分析另一组代码?还是您有一个代码库,而您只是想检查它,就像在 IDE 中一样?
-
哦,我误解了这个问题吗?我以为您是在询问编写一个执行此操作的 Java 程序。你的意思是如何在你的IDE中做到这一点?好的,这使它成为一个不同的问题。您使用的是哪个 IDE?
-
哦,好的,这太宽泛了,无法在 Stack Overflow 的单个页面上回答。但是对解析器做一些研究——这会让你开始。
-
检测到这一点已经够难的了,但是在反射代码中检测到这样的东西可能是不可能的。我不想尝试检测这样的事情:
String name = String.format("%c%s%c%s", 32, "java.lang", 46, "System"); Class.forName(name.substring(1));
标签: java software-design