Перечисляет против классов в программе типа базы данных? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь создать программу типа базы данных и хотел узнать, следует ли мне использовать перечисления или классы для представления свойств каждого элемента в базе данных.

Позже я сделаю другие вещи, но, чтобы попробовать кодирование, я использую Pokemon в качестве примера. Итак, моя текущая идея - иметь класс покемонов. Базовые переменные экземпляра, которые представляют свойства каждого объекта Pokemon, являются первым и вторым типом. Тип - это сейчас собственный класс, и каждый тип обладает свойством быть слабым по отношению к другим типам. Это представлено списком других типов. Я не знаю много о перечислениях, но из того, что я прочитал, они хороши, когда вам нужен неизменяемый набор значений, и я подумал, что это будет хорошо для типов. Однако, когда я пытался определить список слабых мест в конструкторе enum, я столкнулся с проблемой добавления других типов в список, когда они еще не были инициализированы.

Должен ли я сделать Type классом вместо перечисления? Должен ли я сделать Pokemon перечисление вместо класса?

import java.util.ArrayList;

public enum Type {
    NORMAL,
    FIGHTING,
    FLYING,
    POISON,
    GROUND,
    ROCK,
    BUG,
    GHOST,
    FIRE,
    WATER,
    GRASS,
    ELECTRIC,
    PSYCHIC,
    ICE,
    DRAGON;

private String name;
private ArrayList<Type> weaknesses;

private Type(){
    generateWeaknesses();
}

private void generateWeaknesses(){
    switch(this){
    case NORMAL:
        weaknesses.add(FIGHTING);
        break;
    case FIGHTING:
        weaknesses.add(FLYING);
        weaknesses.add(PSYCHIC);
        break;
    case FLYING:
        weaknesses.add(ROCK);
        weaknesses.add(ELECTRIC);
        weaknesses.add(ICE);
        break;
    case POISON:
        weaknesses.add(GROUND);
        weaknesses.add(BUG);
        weaknesses.add(PSYCHIC);
    case GROUND:
        weaknesses.add(WATER);
        weaknesses.add(GRASS);
        weaknesses.add(ICE);
        break;
    case ROCK:
        weaknesses.add(FIGHTING);
        weaknesses.add(GROUND);
        weaknesses.add(WATER);
        weaknesses.add(GRASS);
        break;
    default:
        break;
    }
}
public ArrayList<Type> getWeaknesses(){
    return weaknesses;
}

}

1 Ответ

0 голосов
/ 01 мая 2018

Перечисление должно использоваться для выражения чего-то, что имеет относительно небольшой набор значений, которые не изменяются со временем. MALE и FEMALE не лучшие примеры в наши дни, но вы поняли.

В случае покемонов существует около 20 типов. Те, которые вы действительно могли бы поместить в перечисление, но вы должны выяснить для себя, имеет ли это смысл. Если вы хотите вычислить, какой тип слаб по отношению к другому программно, тогда может иметь смысл перечисление. Но если вы сохраните это в таблице базы данных, содержащей около 400 записей (20 типов и 20 типов), использование перечислений не принесет особой пользы.

Так что это немного зависит. В этом конкретном случае я бы определил типы в базе данных, а также их слабые стороны, на тот случай, если кто-то из Nintendo получит блестящее представление о добавлении новых типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...