在Java中,可以使用不同的方法来设置只读属性。以下是三种常见的方法:
- 使用private关键字和public getter方法
该方法是最简单和最常用的方法。通过将属性设置为private,可以防止直接访问该属性。然后,提供一个public的getter方法,用于获取该属性的值。
public class Person {
private String name;
public String getName() {
return name;
}
}
在上面的代码中,name属性被设置为private,无法直接访问。通过getName()方法,可以获取name属性的值。由于没有提供对应的setter方法,因此无法更改name属性的值,从而实现了只读属性的效果。
- 使用final关键字
另一种设置只读属性的方法是使用final关键字。通过将属性设置为final,可以确保该属性的值在初始化后无法更改。
public class Circle {
private final double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
}
在上面的代码中,radius属性被设置为final,其初始值在构造函数中被赋值,并且无法更改。通过getRadius()方法,可以获取radius属性的值,但无法修改它。
- 使用只读接口
还可以使用只读接口来定义只读属性。只读接口只包含getter方法,不包含任何setter方法。通过实现只读接口,可以确保属性只能被读取而无法被修改。
public interface ReadOnlyProperty {
int getValue();
}
public class Counter implements ReadOnlyProperty {
private int value;
public Counter(int value) {
this.value = value;
}
@Override
public int getValue() {
return value;
}
}
在上面的代码中,ReadOnlyProperty接口只包含了一个getValue()方法。Counter类实现了该接口,并提供了对应的实现。通过实例化Counter对象,可以获取value属性的值,但无法修改它。
类图如下所示:
classDiagram
class Person {
- String name
+ String getName()
}
class Circle {
- final double radius
+ Circle(double radius)
+ double getRadius()
}
interface ReadOnlyProperty {
+ int getValue()
}
class Counter {
- int value
+ Counter(int value)
+ int getValue()
}
Person "1" -- "*" Circle
Counter ..|> ReadOnlyProperty
综上所述,以上是三种常见的设置只读属性的方法。根据具体情况,可以选择适合的方法来实现只读属性。