java 在我创建的类中创建一个新对象是否法律的正确?

2g32fytz  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(127)

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

public Matrix flipHorizontal(){ }

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

ycl3bljg

ycl3bljg1#

当然,让某个类X的成员函数返回新创建的X示例是一种合理的做法。
特别是当X被设计成不可变的时候,例如BigDecimal。该类允许对象的数学计算--但是每个示例在创建时都不能改变。因此,没有其他方法可以通过返回一个新的BigDecimal来实现plus(BigDecimal other),该BigDecimal表示“this + other”。
唯一*工作的是:在X的构造函数中创建X的另一个示例。2这很容易导致一个永不结束的递归。3它在某个时候以堆栈溢出结束,或者可能是内存不足的问题。

mspsb9vt

mspsb9vt2#

是的,非常好。它通常用于对象不可变的情况。这样的方法可以返回对象的副本并应用一些修改。
LocalDate.withYear为例,它是一个示例方法,返回一个新的不可变的LocalDate

LocalDate date = LocalDate.of(2018, 1, 1);
LocalDate nextYear = date.withYear(2019);

我们现在有两个不同的例子,一个在另一个之后一年。
如果你想这样做,你的对象不需要是不可变的,尽管这可能是它最常用的地方。如果你的类不是不可变的,你可能应该在JavaDoc中注意到方法返回一个新的示例,而不是修改现有的示例,以防止任何混淆。
或者,匹配该签名的另一个实现是修改当前示例,然后修改return this

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

这实际上是一种fluent interface,它可能是可取的,但在您的情况下,我认为它可能不是。

相关问题