我可以在Java中创建只读属性吗?

时间:2013-12-16 23:37:52

标签: java

我正在创建一个自定义数组类,它有一个int属性size

如果您执行add()remove()之类的操作,系统会自动修改此属性。我想让用户像myArray.size一样阅读此属性。但是,使public允许用户更改它,这对我的课程没有多大意义,并且可能会破坏它。

我当然可以使它private并创建一个getter方法size()并且一切都很好。我没有问题,但是,有没有办法在Java中创建只读属性?

环顾网络,我发现了这个:

他们的解决方案就像

public final String title;

这在技术上是有效的,但这当然不适用于我的数组,因为我的属性不是常数。

5 个答案:

答案 0 :(得分:3)

您在Java中无法描述的内容。你应该使用getter方法。

答案 1 :(得分:2)

我认为你想要的是让用户能够获得对象的大小但不能写入它。在这种情况下,您将size的值保持为private。你绝对正确的是,通过将public的值设置为不是size的值,用户可以使用getSize()来破坏对象。

你想要的是一个public方法,returnsizesize的值。用户可以调用该方法来读取值,但无法实际写入{{1}}的值。

如果您真的想要了解如何使您的部分或全部数据结构不可变,您可以在此处查看:

不可变对象 http://docs.oracle.com/javase/tutorial/essential/concurrency/immutable.html

答案 2 :(得分:1)

利用getter / setter。或者更确切地说,只是在你的情况下没有设置者的吸气剂。

在此处查找示例:http://docs.oracle.com/javaee/6/tutorial/doc/gjbbp.html

因此,请将该属性设为私有,并创建一个公共方法以“获取”其值。

答案 3 :(得分:0)

答案 4 :(得分:0)

简单的getter是自然的方法,如Java lacks support for properties。 因此,getter是典型的Java程序员所期望的。

即使可以使用公共字段,例如在public final String title示例中,我也不会推荐它。例如,当您将代码提供给想要为其编写单元测试并使用模拟框架的其他人时,这很烦人。

通常应为(静态)常量保留公共字段。