在构造函数中设置,无法更改

时间:2013-09-10 03:03:24

标签: java constructor final protected

嘿伙计们,我正在制作“特许经营”计划。特许经营权拥有者(特许经营权名称的所有者),州(特许经营所在州的2个字符的字符串)和销售额(特许经营权的一天销售额)均设置在构造函数,不能更改。

package prob2;

public class Franchise {
    final String name;
    final String state;
    final double sales;

protected Franchise(String name, String state, double sales ) {
    this.name = name;
    this.state = state;
    this.sales = sales;
  }

我的问题是:名称,状态和销售必须在构造函数中设置,并且在使用“protected”执行此操作时无法更改或者将变量设置为“final”是否更好? / p>

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

目前没有什么可以修改它们,但没有什么可以阻止你添加一个修改它们的方法。您当前的路径意味着您必须记住它们不应该更改。

如果您的意图永远不会改变,那么请将它们设置为最终。这意味着编译器将检查您是否尝试修改它们并确保在构造函数中为它们提供值。它还将向其他开发人员(包括您在几周内)明确表示他们永远不会改变。

答案 1 :(得分:1)

  

我是否正确使用'protected'或将变量设置为'final'更好?

protected关键字并不代表您认为的含义。实际上意味着什么(在这种情况下)是:

  

“此构造函数可以由同一个包中的任何类以及此类的任何子类调用”。

它没有直接“保护”字段。

正确的解决方案是将final修饰符添加到您不想更改的字段中。然后,Java编译器将停止编写修改相应字段的(普通)Java代码。


我们还应该注意,即使final字段也不能免于被改变。可以使用反射在运行时覆盖修饰符,甚至可以更改private final字段。如果您打算使用privatefinal来实施严格的安全措施,则需要考虑到这一点。基本上,这仅用于防止已经沙箱化的不受信任的代码......即使这样,它也只保护字段的值,而不是字段引用的对象。