相关疑难解决方法(0)

禁用当前线程的Java反射

我需要调用一些半可靠的Java代码,并希望禁用在代码执行期间使用反射的功能.

try{
   // disable reflection somehow
   someObject.method();
}
finally{
   // enable reflection again
}
Run Code Online (Sandbox Code Playgroud)

可以使用SecurityManager来完成,如果是这样,怎么做?

澄清/上下文:这是关于限制可以从JavaScript/Rhino调用的包的另一个问题的后续行动.接受的答案引用了关于如何做到这一点的博客条目,它需要两个步骤,第一个使用Rhino API(ClassShutter),第二个使用关闭反射和Class.forName().我想我可以使用SecurityManager更干净地完成第二步(了解SecurityManager,正如已经指出的那样,沿途是一个复杂的野兽).

总而言之,我希望(从代码,而不是设置文件)关闭Class.forName()以及对整个反射包的任何访问.

java security reflection sandbox securitymanager

20
推荐指数
2
解决办法
7626
查看次数

Private是Private,那么为什么java提供使用反射访问私有方法的工具?

使用反射时需要注意哪些潜在问题.我在反思中非常困惑,为什么java提供这种类型的功能来访问私有数据成员.

私有: 就像我想的那样,只有声明它的类才能看到它.

那为什么有可能访问其他类的私人事物?这个术语(反射)完全溢出了我在java中的private(Access Specifier)属性的概念.

我访问了许多有关此主题的链接,但没有给出关于此主题的完整说明.例如:

package example;

import java.lang.reflect.Method;

class A{
    private void privateMethod(){
        System.out.println("hello privateMethod()");
    }
}
class B{
    public static void main(String[] args) throws Exception {
        A d = new A();
        Method m = A.class.getDeclaredMethod("privateMethod");       
        m.setAccessible(true);
        m.invoke(d);
    }
}
Run Code Online (Sandbox Code Playgroud)

请详细解释这种方法的情景?我需要其他类中私有方法可访问性的优点和缺点吗?

java reflection

9
推荐指数
1
解决办法
311
查看次数

标签 统计

java ×2

reflection ×2

sandbox ×1

security ×1

securitymanager ×1