Java 在我创建的类中创建新对象是合法和正确的吗?

Java 在我创建的类中创建新对象是合法和正确的吗?,java,object,Java,Object,我有一个家庭作业,要求我在我创建的对象中实现一个方法,该对象返回该类型的对象,而该方法没有参数。我唯一能想到的方法是在方法中创建该类的对象,我的问题是,正确的模式设计吗? 我的意思是它可以工作,但我不知道它的实现是否良好 方法如下: 公共矩阵flipHorizontal(){} 因此,我在这个方法中创建了一个矩阵对象(带有复制构造函数),它是矩阵类的一部分,然后我相应地操作了矩阵,然后返回了对象。是的,它非常好。它通常在对象不可变时使用。这种方法可以返回对象的副本并应用一些修改 例如,这是一个实

我有一个家庭作业,要求我在我创建的对象中实现一个方法,该对象返回该类型的对象,而该方法没有参数。我唯一能想到的方法是在方法中创建该类的对象,我的问题是,正确的模式设计吗? 我的意思是它可以工作,但我不知道它的实现是否良好

方法如下: 公共矩阵flipHorizontal(){}


因此,我在这个方法中创建了一个矩阵对象(带有复制构造函数),它是矩阵类的一部分,然后我相应地操作了矩阵,然后返回了对象。

是的,它非常好。它通常在对象不可变时使用。这种方法可以返回对象的副本并应用一些修改

例如,这是一个实例方法,它返回一个新的不可变的
LocalDate
。示例用法:

LocalDate date = LocalDate.of(2018, 1, 1);
LocalDate nextYear = date.withYear(2019);
我们现在有两个截然不同的例子,一个是一年又一年

如果您想做到这一点,并不要求您的对象是不可变的,尽管这可能是它最常用的地方。如果您的类不是不可变的,那么您可能应该在JavaDoc中注意,该方法返回一个新实例,而不是修改现有实例,以避免任何混淆


或者,与该签名匹配的另一个实现是修改当前实例,然后
返回此

class Matrix {
    Matrix flipHorizontal() {
        //do the flip...
        return this;
    }
}

这实际上是一种挑战。这可能是可取的,但对你来说,我认为可能不是。让某些类X的成员函数返回新创建的X实例是一种合理的做法

特别是当X被设计为不可变时,例如像BigDecimal。该类允许对对象进行数学计算,但创建时不能更改每个实例。因此,没有其他方法可以通过返回表示“this+other”的新的BigDecimal来实现
plus(BigDecimal-other)


唯一不起作用的事情是:在X的构造函数中创建另一个X实例。这很容易导致一个永无止境的递归。这会在某个时候导致堆栈溢出,或者可能出现内存不足问题

请在此提供您的代码。一般来说,在Java方法中创建一个新对象是完全合法和正确的。你可能在说单例模式,查一下。我注意到你的问题仍然是“开放的”:你没有接受答案。请看一看,然后决定是否要回答。或者让我知道是否有什么我可以做的,以加强我的投入,使其值得接受。接受帮助未来的读者确定问题是否得到解决,并对花时间回答你的人表示感谢。