Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:编写以“开始”开头的方法是一种不好的做法吗;获得;当它们不是';t getters?_Java_Oop_Syntax_Getter Setter - Fatal编程技术网

Java:编写以“开始”开头的方法是一种不好的做法吗;获得;当它们不是';t getters?

Java:编写以“开始”开头的方法是一种不好的做法吗;获得;当它们不是';t getters?,java,oop,syntax,getter-setter,Java,Oop,Syntax,Getter Setter,我只是好奇,因为我习惯于objC,在那里我们使用点符号来调用getter,所以当一个方法以get开头时,它不一定与实例变量有任何关系 在java中,编写以“get”开头的方法会是一种糟糕的做法吗当它们不是getter时?这实际上取决于你如何使用它,除非它会使代码混淆或误导你的方法,不管你想怎么命名。对于比简单的getter更有用的方法,使用前缀get可能会误导,因为该方法可能会产生意想不到的后果打电话的人 更好的做法是将附加功能提取到一个新方法中,这个新方法的名称描述了它的意图。如果你这样做,它

我只是好奇,因为我习惯于objC,在那里我们使用点符号来调用getter,所以当一个方法以get开头时,它不一定与实例变量有任何关系


在java中,编写以“get”开头的方法会是一种糟糕的做法吗当它们不是getter时?

这实际上取决于你如何使用它,除非它会使代码混淆或误导你的方法,不管你想怎么命名。

对于比简单的
getter
更有用的方法,使用前缀
get
可能会误导,因为该方法可能会产生意想不到的后果打电话的人


更好的做法是将附加功能提取到一个新方法中,这个新方法的名称描述了它的意图。

如果你这样做,它不会结束世界,但是从5年后将要查看你的代码的人那里考虑一下。就我个人而言,我不会使用get来表示实际上不是getter的方法。如果需要,可以使用fetch。但这只是个人喜好

看看这个博客


尽管根据JavaBeans约定,getter的名称必须以
get
开头,但并非所有以
get
开头的名称都必须表示“哑”getter,即由简单变量支持的名称。如果一个方法得到了一些东西,甚至是一个与您的对象关联的计算过的东西,给它一个以
get
开头的名称是完全合适的

下面是一个不表示变量支持属性的“get”方法示例:

public class Person {
    private Date dob;
    // DOB is a "classic" property
    public Date getDob() {
        return dob;
    }
    public void setDob(Date dob) {
        this.dob = dob;
    }
    // Although ageInYears is a calculated property,
    // a name that starts in "get" is appropriate for it.
    int getAgeInYears() {
        Calendar now = Calendar.getInstance(Locale.US);
        now.setTime(new Date());
        Calendar old = Calendar.getInstance(Locale.US);
        old.setTime(dob);
        int diff = now.get(YEAR) - old.get(YEAR);
        if (old.get(MONTH) > now.get(MONTH) || 
        (old.get(MONTH) == now.get(MONTH) && old.get(DATE) > now.get(DATE))) {
            diff--;
        }
        return diff;
    }
}

我想,答案是肯定的。大多数Java程序员习惯于将getter作为 返回私有字段值的方法

由于“get”对于方法名来说是非常通用的,所以更倾向于使用更精确的方法名,它可以告诉您有关意图(“为什么”)或算法(“如何”)的信息。 sortNames(…)或applyQuicksort(…)比getPhoneBook()好得多。 此外,findNumberForName(…)比getNumber(…)好得多。 “Find”表示它的复杂度为O(log(n))或O(n),但不像getter通常那样为O(1)

有时候你需要或者你想让这个名字非常笼统。
我总是用“提供”而不是“获取”来避免混淆。

你有什么理由想这样做吗?不要用
get
来表示非getter,除非你必须使用“创建”或“获取”,如果它不是真正的getter