java - 在 Java 上制作数据结构的最惯用方法

标签 java oop data-structures

<分区>

我正在用 Java 创建一个 Card 类,我希望它尽可能地地道。我是否应该封装所有字段,使其成为私有(private)字段并提供以下 getter:

    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);
        }

    }

我正在阅读 Clean Code在 Data Structures vs OO classes 的章节中,我不知道在这种情况下我应该采取什么方法。提前致谢!

编辑: 此类是我正在开发的 BlackJack 的一部分,我需要访问其他类中的字段。

编辑: 这个问题搁置了,但是,这个问题应该发到哪里呢?我应该将它移至 Code Review 吗?我真的很想知道更多有经验的程序员对这个问题的看法,但我想把它贴在正确的网站上

最佳答案

理论上,当你设计OOP解决方案时,你必须提供least priviledge wherever possible.因此,您的第一种方法是可行的。但是,我会 rather implement hashCode() 使卡片的唯一性更加清晰。

您要实现的称为 immutable objects

关于java - 在 Java 上制作数据结构的最惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771875/

相关文章:

c++ - 如果某些类继承了抽象基类,则确定何时在某些类上使用函数

python - 创建一组 Python 类

algorithm - 检索和存储路线图数据

java - 在 Java 中组合多个矩形

java - @MockBean 似乎重新运行上下文创建并在 Migrate.sql 之后失败

java - 放入 util 类的适当方法?

将数组转换为结构体

JavaFX 组合框未显示对象的正确值

java - Android 在 onClickListener 中更改 TextView 需要最终声明吗?

c++ - 以错误的方式在子类中调用函数的最佳方法是什么?