本课程中getter / setter的目的

时间:2015-09-21 06:02:50

标签: java

在这个类中,我有构造函数接受4个参数。并且适当地初始化值。将int imageid设置为mImageId等。

如果成员变量由参数初始化,那么getter / setter序列的目的是什么?

从我读过的。每个字段或成员变量的getter / setter实质上使该类“公开”。或者getter / setter的目的是向另一个类广播一些“意图”?

public class Page {

private int mImageId;
private String mText;

private Choice mChoice1;
private Choice mChoice2;


public Page(int imageId, String text, Choice choice1, Choice choice2 ){
    mImageId = imageId;
    mText = text;
    mChoice1 = choice1;
    mChoice2 = choice2;
} 

 // start of getters/setters
public int getImageId(){

    return mImageId;
}

public void setImageId(int id){
    mImageId = id;
}

public String getText() {
    return mText;
}

public void setText(String text) {
    mText = text;
}

public Choice getChoice1() {
    return mChoice1;
}

public void setChoice1(Choice choice1) {
    mChoice1 = choice1;
}// Choice 1

public Choice getChoice2() {
    return mChoice2;
}

public void setChoice2(Choice choice2) {
    mChoice2 = choice2;
}// Choice 2

5 个答案:

答案 0 :(得分:2)

这是一个可变类,这意味着即使在实例化时设置了初始状态,也可以在不创建新实例的情况下更改它。

您可能认为这是JavaBean,但由于它没有公开no-arg构造函数,getter或setter的名称也不匹配字段的名称,因此它不是严格按照惯例

答案 1 :(得分:1)

setter可让您稍后更改变量的值。

getter允许您从另一个类访问变量的值。

在您的上下文中,我认为Page描述了一些页面内容。现在,假设您将Page对象传递给某种布局类,它将使用getters访问变量的值来呈现布局。由于变量被声明为私有,除了使用getter方法之外,没有其他方法可以访问它们。

答案 2 :(得分:1)

在构造对象后,您可能仍需要设置成员变量。

如果你不实现setter,这将有效地使类不可变,在某些情况下也可能是想要的行为。

那么,这取决于你在特定情况下的需求,不是强制性的。对于getter - 是的,如果你想阅读对象的内容,这是常见的方式。但它不需要是成员变量的1:1。

PS:我建议避免那些" m"前缀,这在Java中非常罕见,不提供任何实际价值并使代码可读性降低。

答案 3 :(得分:0)

getter / setters使用JavaBean制作POJO。 有许多框架使用Bean标准来创建/操作Java对象。

例如,ORM框架可以从SQL查询创建Beans,JAX-RS框架可以从HTTP请求创建Beans等。

注意:Java Bean标准需要一个默认的无参数构造函数。

答案 4 :(得分:0)

  1. 没有问题,您可以根据自己选择任何setter / getter序列。

  2. " public" java编译器(javac)使用关键字来访问包含main方法的类。

  3. 但是在java bean的情况下,类通常放在包中以获得适当的层次结构,因此要从不同的包访问这些类,我们需要创建类" public"。