5

我有一个场景,我想运行我无法控制的代码。我想防止在该代码中使用任意标准 JDK 方法(例如,我想防止在任何 String 对象上使用 lastIndexOf() 方法)。

如果使用了禁止的方法,它应该会导致运行时异常。

我怀疑这可能通过自定义类加载器实现,但我不确定如何解决这个问题。我遇到的部分问题是 String 是一个不能扩展的最终类。

例子:

//I control this code
int result = SomeClass.method("foo") //I don't control SomeClass

//A valid implementation of SomeClass.method()
int method(String in) {return 1;}

//An invalid implementation of SomeClass.method()
int method(String in) {return in.lastIndexOf("o");}
//the above should throw an error at run time when called from my code
4

2 回答 2

0

我建议将反射作为解决方案,但您想要的是解决问题的方法,而不是解决问题的技术解决方案。

您的问题范围可能比我们在这里讨论的要大得多。

于 2019-05-02T13:46:45.680 回答
0

我记得编写了一个自定义的 findbugs 检测器来查找特定的方法调用。在我的情况下,它也分析了它的参数,但看起来你的情况有点简单。

或者,您可以使用 ASM 库。

最天真的,您可以使用 javap 反汇编该类并 grep 输出。

于 2019-05-03T10:17:41.040 回答