【发布时间】:2020-09-17 20:10:40
【问题描述】:
我开始学习面向对象编程,导师说“getter”和“setter”函数用于访问和更改另一个类中的某些私有变量。
我被告知要编写一个程序来创建一副纸牌,打印它,洗牌,最后打印洗好的牌。作业说我必须使用良好的面向对象原则。
我写了这段代码,它可以正常工作
import java.util.Random;
public class CardDeck {
static String[] suitArray = {"Clubs", "Diamonds", "Hearts", "Spades"};
static String[] faceValue = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10","Jack", "Queen", "King"};
static String[] deckOfCards = new String[52];
public static void createDeck()
{
int i = 0;
for ( int j = 0; j < 4; j++ )
{
for ( int k = 0; k < 13; k++ )
{
getDeckOfCards()[i++] = getSuitArray()[j] + getFaceValue()[k];
}
}
for(i = 0; i < 52; i++)
{
System.out.println(deckOfCards[i]);
}
}
public static String[] getSuitArray() {
return suitArray;
}
public static void setSuitArray(String[] suitArray) {
CardDeck.suitArray = suitArray;
}
public static String[] getFaceValue() {
return faceValue;
}
public static void setFaceValue(String[] faceValue) {
CardDeck.faceValue = faceValue;
}
public static String[] getDeckOfCards() {
return deckOfCards;
}
public static void setDeckOfCards(String[] deckOfCards) {
CardDeck.deckOfCards = deckOfCards;
}
}
我只包含了创建套牌的部分。
使用 getter 和 setter 方法有什么害处吗?如果没有,我会保留它们,以防我的教练希望看到我使用它们
【问题讨论】:
-
一般来说不会,尽管可以使用具有逻辑的 getter,它过滤或转换它返回的值。您不需要需要删除设置器,如果您不需要它们做任何事情,您可以删除它们,但您的教师可能希望看到它们,或者您稍后可能需要它们。它们只是额外未使用的代码,没什么特别的。
-
这能回答你的问题吗? Why use getters and setters/accessors?
-
看起来围绕这个问题存在强烈的不同意见。我个人倾向于不将 getter 或 setter 用于最终变量,无论是公共的还是私有的,对于我倾向于始终使用它们的可变变量。不过,我不准备公开捍卫这些选择。
-
我个人喜欢尽可能使用 getter/setter,以避免在需要调整返回的值时发生潜在的代码重构。这可以被认为是一种叫做 speculative generality 的代码味道(有点……它被使用但不一定有用),所以你的里程可能会因你发现这样做的有用程度而有所不同。
-
“作业说我必须使用良好的面向对象原则”——如果这是真的,那么代码中的所有
static关键字都需要删除。