Многоуровневое наследование с классом RealmObject для базы данных Realm [дубликат]

phpMyAdmin может обрабатывать импорт CSV. Вот шаги:

  1. Подготовьте CSV-файл к полям в том же порядке, что и поля таблицы MySQL.
  2. Удалите строку заголовка из CSV (если есть ), так что в файле будут только данные.
  3. Перейдите в интерфейс phpMyAdmin.
  4. Выберите таблицу в левом меню.
  5. Нажмите на импорт
  6. Перейдите в файл CSV.
  7. Выберите параметр «CSV, используя LOAD DATA».
  8. Введите «,» в поля « завершено «.
  9. Введите имена столбцов в том же порядке, что и в таблице базы данных.
  10. Нажмите кнопку go и вы закончите.

Это примечание, которое я подготовил для моего будущего использования и поделился здесь, если кому-то может помочь.

2
задан Nolan Amy 8 July 2015 в 00:32
поделиться

2 ответа

У меня была такая же проблема, когда я узнал, что realmObjects должен наследовать непосредственно класс RealmObject (без поддержки наследования). Чтобы вернуться к преимуществам полиморфизма, я рассмотрел аналогичное решение для вас в сочетании с некоторыми трюками состава, которые позволили бы избежать дублирования атрибутов.

«Обсуждение дешево показывает мне код».

Примеры кода

interface IPerson {
    String getName();
}

class Person extends RealmObject implements IPerson {

    String name;

    @Override
    public String getName() {
        return name;
    }
}

interface IWorker extends IPerson {
    int getSalary();
}

class Worker extends RealmObject implements IWorker {

    Person person;
    int salary;

    @Override
    public String getName() {
        return person.getName();
    }

    @Override
    public int getSalary() {
        return salary;
    }
}

Некоторые преимущества

Вам не придется дублировать свои атрибуты в каждом расширяющемся классе.

Полиморфизм вернулся! Например, теперь вы можете имитировать листинг (с помощью getPerson () в этом примере).

Некоторые ограничения

При использовании библиотеки сериализации, использующей отражение (предположим, что это Gson), ваш сериализованные модели будут иметь встроенные атрибуты их родителей. Не что-то, что у вас было бы, если бы вы использовали классическое наследование.

Пример с JSON

Предположим, что Джон Доу делает 500 $ в месяц. (Он - рабочий и прав человека?).

С классическим наследованием Джон Доу будет выглядеть так:

{
  "name":"John Doe",
  "salary": 500
}

Но с этим обходным путем наследования ...:

{
  "person" : {
  "name":"John Doe"
  },
  "salary": 500
}

Надеюсь, что это поможет!

Примечание

К сожалению, PrimaryKeys необходимо дублировать.

Бонус

Вы может захотеть проверить RealmFieldNamesHelper , библиотеку, сделанную Christian Melchior ", чтобы сделать запросы в Царстве более безопасными типами.

1
ответ дан Anix PasBesoin 21 August 2018 в 01:57
поделиться

Если вы используете Kotlin, разделение полей через интерфейс становится еще более тривиальным:

interface PersonBase {
    var name: String?
    var salary: Int
}

Затем

class Person: RealmObject(), PersonBase {
}
0
ответ дан EpicPandaForce 21 August 2018 в 01:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: