这是明智的吗?使用构造函数中位于同一个类中的方法设置变量

时间:2014-03-11 20:17:16

标签: java

我不知道如何在我的小空间里更好地表达我的问题。这是一个更好的解释:

我有一个长度为5的String[] test。该类用于编辑test以便在另一个类中编辑。无论如何,我的构造函数将所有5个字符串传递给test。我最初的设置是这样的:

public Generic(String field1, String field2, String field3, String field4, String field5){
test[0] = field1;
test[1] = field2;
test[2] = field3;
test[3] = field4;
test[5] = field5;
}

但我发现我想使用我在课堂上使用的方法来设置它们。所以我使用test[0] = field1;而不是setField1(field1);等。setField1(String Field)中的所有内容都与以前在构造函数中的内容相同。

我只是想确保这不是一个愚蠢的举动,在构造函数中调用我的类中的方法来设置变量。或者,如果我不应该养成这种习惯。或者我的想法很好。

谢谢!

4 个答案:

答案 0 :(得分:1)

在这种情况下使用setter的唯一原因是setter是否具有验证逻辑。否则,您只需通过调用与this.x = x;相同的方法向JVM添加如此轻微的开销。

答案 1 :(得分:1)

我第一次回答问题,所以这里什么都没有。你的问题的措辞很难理解。

如果您只需要更改数组中的一个项目,则应使用setter方法。此外,您的构造函数应该使用循环而不是单独设置每个循环,以防将来更改数组大小。

另外,如果您尝试编辑这些值(在我假设它们已经被设置过一次,构造函数或其他类型之后),就像您已经说过的那样,那么您将需要使用setter变量设置为private。

答案 2 :(得分:0)

一般来说,在构造函数中调用方法来初始化变量是一种很好的做法。如果不使用那些方法,除了在构造函数中创建一个私有方法来完成工作并在构造函数中调用这个方法或者如果它们不会在外面使用它们将它拆分成几个私有函数,那会更好那个班。 所以我会有以下内容:

public Generic(String field1, String field2, String field3, String field4, String field5) {
    initialize_fields(field1, field2, field3, field4, field5);
}

private void initialize_fields(String field1, String field2, String field3, String field4, String field5) {
    test[0] = field1;
    test[1] = field2;
    test[2] = field3;
    test[3] = field4;
    test[4] = field5;
}

这是以下封装,您将使用除了私有类之外未使用的方法(隐藏类的详细信息并为您的类的用户提供一个简单的界面)。

另一方面,使用数组作为构造函数的输入而不是5个值并使用循环将值分配给测试数组可能是个好主意。

如果您需要在setter方法中设置值之前检查条件,使用setter也几乎总是一个好主意,这意味着您必须在setter方法中检查它不仅仅是分配的验证或条件。如果在课堂内没有使用它们,你必须使用它们,否则无关紧要,你喜欢的是你想要的,这意味着你可以按照自己的意愿使用直接分配或设置器。

答案 3 :(得分:0)

使用方法来初始化变量本身并不是一件坏事,但是你不应该调用可以从构造函数中重写的方法。

有关详细信息,请参阅此答案:Why is it considered bad practice to call a method from within a constructor?