Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 使用或不使用getter/setter在方法/构造函数中设置参数,哪种方法更好?_Java_Oop - Fatal编程技术网

Java 使用或不使用getter/setter在方法/构造函数中设置参数,哪种方法更好?

Java 使用或不使用getter/setter在方法/构造函数中设置参数,哪种方法更好?,java,oop,Java,Oop,我正在尝试为表示对象的类构建构造函数。 问题是,我不确定哪种方法更好,在构造函数/方法中使用getter/setter,还是只使用“=”运算符(请记住,这正是setter所做的) //或 public class Object{ int x; public Object() { Object obj = new Object(); obj.setObjInt(1); } public int objectsInt(Object other) { if

我正在尝试为表示对象的类构建构造函数。 问题是,我不确定哪种方法更好,在构造函数/方法中使用getter/setter,还是只使用“=”运算符(请记住,这正是setter所做的)

//或

public class Object{
int x;
public Object()
{
       Object obj = new Object();
       obj.setObjInt(1);
}

public int objectsInt(Object other)
{
        if(other!=null)
        {
           Object obj = new Object();
           obj.setObjInt(other.getObjInt)
           return obj.getObjInt;
        }
        else
        {
           return 0;
        }
}

public int getObjInt()
{
        return x;
}

public void setObjInt(int x)
{
        this.x = x  ;
}
}
或者也许有一种不同的方式我没有想到。 附笔 这只是一个演示,不是我真正的代码,对象类要复杂得多
因此,我尽可能简单地让您理解我的意图。

行业标准使用

this.x = x;
无需在构造函数内调用getter和setter。
因此,我坚持使用它。

首先,您的第二个代码示例将得到一些无限递归,因为您的构造函数在第一行中调用自己。您是否尝试过测试这两段代码?第二个将由于调用堆栈溢出而导致错误,因为构造函数无条件地调用自己。据我所知,这完全是基于观点/约定的。就我个人而言,我发现
this.x=x
感觉它更轻量级,因为它不会卷起整个方法。我不知道这是否真的会对Java产生影响。这只是我的偏好。两者都不是“更好”或“更差”,但你会使用哪一个取决于你想要使用它们的环境和你试图解决的问题。“复制”通常会返回对象的新实例,并将相同的属性复制到该实例。以这种方式设置属性(通过使用另一个实例引用)对我来说似乎是错误的(IMHO),我只想使用
set/getX
,但这就是我。如果您想创建一个不同的对象,它基于第一个属性的一些(或全部),我可能会考虑使用工厂模式。instead@matthew-e-brown Java“倾向于”使用setter/getter(访问器),因为它维护封装,但是,对于每个规则;)你能举出一个源代码吗?没有源代码,但我从来没有见过在构造函数中调用getter和setter,通常,教科书建议使用它们来访问类中的私有参数,而OP在示例中所做的是多余的,在我看来这没有任何意义,谢谢!我个人使用了第一部分,我班上的一位朋友使用了另一部分,对我来说也有点混乱,但我无法判断我们中的哪一位使用了“正确的方式”。现在我对我的答案更有信心了:)
this.x = x;