1
1
正如您所演示的,Java访问修饰符只是提供信息,可以通过使用反射来规避它们。所以你的问题大致相当于“绕过访问修饰符有什么好处?”除了恶意的目的, 在脑海中浮现;例如,您可以从 外部 库,而不必触及库代码本身。另一个例子是 与脚本语言的协作 ; 如果在编译时不知道哪些类和方法是可用的,那么反射是非常有用的。例如, Jython |
2
1
作为开发人员,您对合成方法的兴趣是什么?首先,不要调用它们(因为其他回答者已经解释过的原因)。 但是有一件有趣的事情需要记住,特别是如果您正在编写Java代码以在安全敏感的环境中运行,那就是合成方法可能会为攻击者提供一个通往您的私有字段的后门。 当然,有一些大的“如果”--我的意思是,必要的条件--对于这样一个脆弱性实际上是重要的:
|
3
0
您不应该使用反射调用合成访问器方法,它们可能会发生更改,具体取决于您使用的编译器。例如,在我的机器上运行jdk1.6上的解决方案失败,因为
合成访问器是一种隐藏的编译器黑客,它绕过了这样一个事实:内部类是Java1.1的一个补充,VM规范从未更改以适应它们。 |
Görkem Mülayim · Java合成方法和桥接方法的混淆 7 年前 |