我有一种情况,我想运行不受控制的代码。我想防止在该代码中使用任意标准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
答案 0 :(得分:0)
我建议使用Reflection作为解决方案,但您想要的是解决问题的方法,而不是技术解决方案。
您的问题的范围可能比我们在这里讨论的要大得多。
答案 1 :(得分:0)
我记得写过一个自定义的findbugs检测器,该检测器用于查找特定的方法调用。就我而言,它也分析了它的参数,但是看起来您的情况有点简单。
或者,您可以使用ASM库。
最天真的,您可以使用javap来反汇编该类并grep输出。