我们怎样才能拥有一个在类中可写的变量,但只能在其外部"可读"?
例如,而不是必须这样做:
Class C {
private int width, height;
int GetWidth(){
return width;
}
int GetHeight(){
return height;
}
// etc..
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
Class C {
public_readonly int width, height;
// etc...
Run Code Online (Sandbox Code Playgroud)
什么是最好的解决方案?
Ale*_* N. 40
创建一个包含public final字段的类.提供构造函数,以初始化这些字段.这样你的类将是不可变的,但是你不会有从外部访问值的开销.例如:
public class ShortCalendar
{
public final int year, month, day;
public ShortCalendar(Calendar calendar)
{
if (null == calendar)
throw new IllegalArgumentException();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DATE);
}
}
Run Code Online (Sandbox Code Playgroud)
Luc*_*ore 18
在Java中没有办法做到这一点.
您提供的两个选项(您提到的一个选项)正在使用公共getter并将该字段设为私有,或者在类中提供全面的文档.
getter方法的开销非常小(如果有的话).如果你这么做很多次,你可能想要缓存获取的值而不是调用get方法.
编辑:
一种方法,虽然它比getter有更多的开销,但是定义一个公共内部类(让我们称之为innerC)使用只对你的C类可用的构造函数,并使你的字段公开.这样,您就无法innerC在课堂外创建实例,因此无法从外部更改字段,但您可以从内部更改它们.但是你可以从外面读它们.
无法从外部使字段“只读”。唯一且正确的方法是将字段设为私有并仅提供 getter,而不提供 setter。
| 归档时间: |
|
| 查看次数: |
48428 次 |
| 最近记录: |