【发布时间】:2016-07-03 00:06:58
【问题描述】:
我希望类的每个对象都能够访问类变量,但不想在类外被修改。 比如Array.length的使用方式。
但也希望在类中有一个有条件地修改此变量的方法。
基本上这种用法是用于调整对象数组大小的实现,其中对象数组的长度可以动态变化。
【问题讨论】:
标签: java class variables object
我希望类的每个对象都能够访问类变量,但不想在类外被修改。 比如Array.length的使用方式。
但也希望在类中有一个有条件地修改此变量的方法。
基本上这种用法是用于调整对象数组大小的实现,其中对象数组的长度可以动态变化。
【问题讨论】:
标签: java class variables object
这里似乎有一些令人困惑的地方。
我希望类的每个对象都能够访问类变量,但不想在类外被修改。比如Array.length的使用方式。
Array.length(实际上)是一个最终字段——Java 中数组的长度不能改变,因此不能从类内部或修改它。
但也希望在类中有一个有条件地修改此变量的方法。
如果一个变量是 final 的,就像数组中的 length 字段,那么它的值根本不能被任何东西修改。
您不会直接从字段中获得这种级别的控制。相反,您应该遵循标准的 getter 模式 - 将字段设为私有且非最终的,提供一个公共方法来获取其值(例如 getLength()),然后根据需要在该类中设置它。这使您可以根据需要灵活地从类中更改值,同时仍然允许从其他任何地方读取值。
【讨论】:
array like length feature where length is not fixed and can change based on new objects added。但是,这是不正确的 - 数组的长度 是 固定的。 ArrayList 集合类的长度不是固定的(动态大小),但因此您会发现长度是通过 getter 方法 (getSize()) 获得的,而不是最终变量。
Array.length 被标记为final,因此在构造函数返回后无法修改。我不知道你在说什么。
我猜,你想要一个包含公共 getter 和私有 setter 的私有字段?
private int someField = 0;
public int getSomeField() { return someField; }
private void setSomeField(int newValue) {
if (someCondition) {
someField = newValue;
}
}
someField 和setSomeField 都是私有的,因此该类之外的任何代码都不能修改someField 的值。 someField的值。setSomeField有条件地设置someField的值。满足要求!
【讨论】:
我认为我想做的事情可以通过 ArrayList 实现来完成。感谢您的回复。
【讨论】: