Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何分析脱离上下文的Java方法?_Java_Static Analysis - Fatal编程技术网

如何分析脱离上下文的Java方法?

如何分析脱离上下文的Java方法?,java,static-analysis,Java,Static Analysis,我试着做以下工作:对于一个给定的Java方法,我想看看这个方法是否可以在特定的上下文中使用并且是正确的,也就是说,是否存在某些类、字段、方法等的定义,这些定义的存在使得这个方法是正确的。例如,方法 int m() { A a = new A(); return a.value() + 1; } 例如,定义了类A,该类有一个名为value的公共方法,并且该方法返回int时是正确的。另一方面 int m() { A a1 = new A(); int n = a1.

我试着做以下工作:对于一个给定的Java方法,我想看看这个方法是否可以在特定的上下文中使用并且是正确的,也就是说,是否存在某些类、字段、方法等的定义,这些定义的存在使得这个方法是正确的。例如,方法

int m() {
    A a = new A();
    return a.value() + 1;
}
例如,定义了类
A
,该类有一个名为
value
的公共方法,并且该方法返回
int
时是正确的。另一方面

int m() {
    A a1 = new A();
    int n = a1.value();
    A a2 = new A();
    String s = a2.value();
    return s.length() + n;
}

没有上下文可以使方法正确。我知道这个问题可能有点过于宽泛(而且有点理论化),但总的来说,我该如何处理这类问题呢?首先,我知道应该有某种类型的检查和控制流分析。不过,我不确定这是否是必须完成的全部工作。

还需要使用类加载器,以及被测试应用程序必须查看引用类是否可用的类路径。我认为,从那个里反射来检查方法签名。类型系统会有所帮助。第二段代码是错误的,因为.value()不能同时为int和String。这正是系统可以检查的类型可能是这种错误导致方法无法编译。。如果不编译java,您想如何查看它是否正确?@X-Pippes可能会使用一种算法,该算法使用与编译器类似的逻辑,但不同的是,当它遇到未定义的类型时,它会假设该类型在某个地方定义,并且只有当它发现矛盾时,它才会报告无法完成。但是,我不知道如何实现这一点(如果这个想法是正确的ofc)您能详细说明为什么运行编译器无法解决您的问题吗?谢谢