我有一个包含3种方法的Java类。
我的问题是:
1 - 如何隐藏Java反射枚举的方法?
2 - 如何隐藏这三种方法中的一种方法至少不能被Java反射枚举?
答案 0 :(得分:2)
如果反射不能达到你想要的效果,请更改它;-)严重的是,你可以使用动态加载的java代理重新转换反射类并输入一些ifs来隐藏你的方法。
此this blog post使用此技术来改变LambdaMetafactory
的行为。改变反射类是类似的。
答案 1 :(得分:1)
你无法隐藏任何来自Reflection。
在某些情况下,这会产生可怕的后果。例如,旧版本的Android在Integer中有一个IntegerCache类,它缓存了前128个整数的盒装版本。它是私有的,但是使用Reflection你可以将其修改为非常有趣的效果(使整数的盒装版本不等于未装箱的版本,因为拳击通常是隐含的......)
那就是说,你可以使用lambdas。这些仍然可以通过反思来达到,但是有着令人讨厌的非显而易见的名字。
您可以做的另一件事是将您的秘密函数放在本机代码中,该代码使用JNI检查Java的状态,以确定是否允许此调用。有点邪恶的黑客,但它可能是你能做的最好的:/