如何从Java反射中隐藏方法?

时间:2016-03-04 02:08:11

标签: java reflection

我有一个包含3种方法的Java类。

我的问题是:

1 - 如何隐藏Java反射枚举的方法?

2 - 如何隐藏这三种方法中的一种方法至少不能被Java反射枚举?

2 个答案:

答案 0 :(得分:2)

如果反射不能达到你想要的效果,请更改它;-)严重的是,你可以使用动态加载的java代理重新转换反射类并输入一些ifs来隐藏你的方法。

this blog post使用此技术来改变LambdaMetafactory的行为。改变反射类是类似的。

答案 1 :(得分:1)

你无法隐藏任何来自Reflection。

在某些情况下,这会产生可怕的后果。例如,旧版本的Android在Integer中有一个IntegerCache类,它缓存了前128个整数的盒装版本。它是私有的,但是使用Reflection你可以将其修改为非常有趣的效果(使整数的盒装版本不等于未装箱的版本,因为拳击通常是隐含的......)

那就是说,你可以使用lambdas。这些仍然可以通过反思来达到,但是有着令人讨厌的非显而易见的名字。

您可以做的另一件事是将您的秘密函数放在本机代码中,该代码使用JNI检查Java的状态,以确定是否允许此调用。有点邪恶的黑客,但它可能是你能做的最好的:/