4

在java类中编写get方法后,是在同一个类中使用get方法还是变量本身更好?

例如:

if(a.getWidth()>this.getWidth())

或者:

if(a.getWidth()>this.width)

如果我应该使用 this.anything 这么多,我也很困惑。将相同类型的对象相互比较时似乎更容易阅读。

4

6 回答 6

3

在同一个类中使用get方法还是变量本身更好?

恕我直言,使用该变量。访问器方法主要供其他对象使用。

如果我应该使用 this.anything 这么多,我也很困惑。将相同类型的对象相互比较时似乎更容易阅读。

您并不总是需要显式地使用this参考。它主要用于可读性,就像您说的那样。

于 2013-01-24T04:21:40.080 回答
3

我认为使用 getter 方法对可维护性更好。考虑Null Object 模式,一种方法是通过以下方式实现:

public String getName(){
    if (this.name == null){
        this.name = "";
    }
    return this.name;
}

这应该可以避免您在使用变量之前检查大量空值。

public boolean isCorrect(){
    if(this.name != null && this.name.isEmpty()){
        //The null check up is boilerplate code
        return false;
    }else{
        return true;
    }
}

我宁愿这样写:

public boolean isCorrect(){
    if(this.getName().isEmpty()){
        //The null check up is boilerplate code
        return false;
    }else{
        return true;
    }
}

当然,这取决于你是否采用这种模式。

还要考虑你有

double width;
double height;

public double getWidth(){
    return this.width;
}

但是在某些时候,您决定为一个类更改它,但仍然有方法,这样您的程序就不会崩溃。

Dimension dimension;
public double getWidth(){
    return this.getDimension().getWidth();
}
// etc...

最后(正如 MadProgrammer 所评论的),当您使用继承时,可以重写方法以更好地表示预期的对象。

于 2013-01-24T04:43:38.247 回答
2

1) 从类内部看来,使用字段和 getter 之间没有区别,但是如果 getter 被子类覆盖怎么办?

class A {
    String name;
    String address;

    String getName() {
        return name;
    }

    String getAddress() {
        return address;
    }

    String getDescription() {
        return name + " " + address;
    }
}

class B extends A {
    String country;
    @Override
    String getAddress() {
        return super.getAddress() + ", " + country;
    }
}

B.getDescription() 应该返回一个扩展地址,但它不会。如果 A.getDescription() 被实现为

        return getName() + " " + getAddress();

2)我个人不使用this可读性,因为 IDEthis用不同的颜色标记

于 2013-01-24T04:57:19.490 回答
0

除非您遇到参数与字段同名的情况(例如在构造函数中),否则不需要使用 this。

对于访问属性,从长远来看,使用公共 getter 可能是有益的,因为您可能希望向属性添加某种形式的处理,并且如果您在任何地方都使用 getter,则只需进行一次更改。

于 2013-01-24T04:22:16.123 回答
0

如果您的 get 方法返回具有某种格式的数据,则必须使用 get 方法,否则,变量本身就可以使用。

仅当您的方法参数与您的成员变量相同时才需要这样做,否则,这不是强制性的。

例如:

private String str;

public void setString(String str){
   this.str = str;  // here this.str is necessary because this represents the memeber variable
}

public String getString(){
    return this.str; // here this is optional and you can simply omit it 
}
于 2013-01-24T04:30:29.797 回答
0

您可以使用访问器或变量本身,这是个人喜好之一。

有些人喜欢使用变量本身,因为您没有调用函数的开销。但是,如果您对变量的值有任何限制,有时只使用访问器和修改器会更干净;特别是如果您要进行子类化。但它是可以去任何一种方式的事情之一。

我喜欢使用this关键字的方式是,我总是将它用于实例变量。我发现它使代码更易于阅读,因为您可以直观地确定在哪里使用实例变量,以及在哪里使用局部变量。同样,这是个人喜好。

最重要的是确保你的代码干净、可读。此外,请确保您遵循组织使用的任何编码标准,并确保保持一致。

于 2013-01-24T04:36:11.303 回答