【发布时间】:2019-09-03 12:34:40
【问题描述】:
我正在 Java 上创建一个 Card 类,我希望它尽可能地地道。我是否应该封装所有字段,使其成为私有并提供如下获取器:
public class Card implements Comparable<Card> {
private char suit;
private String name;
private int value;
public Card(char suit, String name, int value) {
this.suit = suit;
this.name = name;
this.value = value;
}
public char getSuit() {
return suit;
}
public String getName() {
return name;
}
public int getValue() {
return value;
}
public String toString() {
return name + " of " + suit;
}
@Override
public int compareTo(Card card) {
return Integer.compare(value, card.value);
}
}
或者由于任何字段都不会被修改,所以应该公开所有字段:
public class Card implements Comparable<Card> {
public final char suit;
public final String name;
public final int value;
public Card(char suit, String name, int value) {
this.suit = suit;
this.name = name;
this.value = value;
}
public String toString() {
return name + " of " + suit;
}
@Override
public int compareTo(Card card) {
return Integer.compare(value, card.value);
}
}
我正在阅读“数据结构与 OO 类”一章的 Clean Code,但我不知道在这种情况下应该采取什么方法。提前致谢!
编辑: 这个类是我正在开发的 BlackJack 的一部分,我需要访问其他类的字段。
编辑: 这个问题已经被搁置了,但是,这个问题应该在哪里发布呢?我应该把它移到代码审查吗?我真的很想了解更有经验的程序员对此主题的意见,但我想将其发布在正确的网站上
【问题讨论】:
-
我会把它们都设为私有和最终的,并给每个人一个吸气剂。
-
如果不能修改它们,将它们公开和 final 真的没有意义吗?那将不必要地将他们暴露在课堂之外。
-
@Nexevis 这个类是我正在开发的 BlackJack 的一部分,我需要访问其他类的字段
-
@Davichete 但是将它们设为公开允许它们访问以进行修改和阅读,将它们设为私有的要点之一是您可以取消
set的特权如果你愿意,他们只留下get。使用公共字段,您无法删除set。 -
是的,
public final字段不会是可变的。虽然请注意,仅适用于参考;它不会阻止存储在字段中的可变对象发生突变。但同样,根据我的经验,使用 getter/setter 是 Java 中惯用的做事方式。
标签: java oop data-structures