我知道在编写Java(或大多数)代码时使用访问修饰符是一种重要的实践,但是通过使用反射,这不会有效地变得多余吗?
例如,如果我想通过将变量设置为私有并提供访问器方法来保护对象的敏感变量,某人仍然可以轻松绕过这些限制,可能设置不安全的值。为什么Java提供访问修饰符,然后提供一个绕过它们的工具呢?似乎不使用任何一个都更容易。
我知道在编写Java(或大多数)代码时使用访问修饰符是一种重要的实践,但是通过使用反射,这不会有效地变得多余吗?
例如,如果我想通过将变量设置为私有并提供访问器方法来保护对象的敏感变量,某人仍然可以轻松绕过这些限制,可能设置不安全的值。为什么Java提供访问修饰符,然后提供一个绕过它们的工具呢?似乎不使用任何一个都更容易。
访问修饰符的一个重要目的是为了构造代码,帮助使用该代码的用户有效且正确地理解和使用它。这与充当防篡改安全机制不同。因此,拥有访问修饰符和反射并不矛盾。代码编写人员可以使用访问修饰符表达其意图,需要绕过它们的代码(出于任何原因)可以以通常的风险和影响来执行。