Как? С аннотациями.
Вы просто аннотируете POJO специальной аннотацией, а библиотека делает все остальное.
Внимание! * * 1006
Я не уверен, что Hrisey, Lombok и другие библиотеки генерации кода совместимы с новой системой сборки Android. Они могут или не могут хорошо играть с кодом горячей замены (например, jRebel, Instant Run).
Плюсы:
- Библиотеки генерации кода спасут вас от исходного кода.
- Аннотации делают ваш класс красивым.
Минусы:
- Хорошо работает для простых классов. Создание сложного класса, пригодного для продажи, может быть сложным.
- Ломбок и АспектJ не очень хорошо играют вместе. [подробно]
- Смотрите мои предупреждения.
Хрисей
Внимание!
Hrisey имеет известную проблему с Java 8 и поэтому в настоящее время не может использоваться для разработки под Android.
См. # 1 Не удается найти ошибки символов (JDK 8) .
Хризей основан на Ломбок . Класс Parcelable, используя Hrisey :
@hrisey.Parcelable
public final class POJOClass implements android.os.Parcelable {
/* Fields, accessors, default constructor */
}
Теперь вам не нужно реализовывать какие-либо методы интерфейса Parcelable. Hrisey сгенерирует весь необходимый код на этапе предварительной обработки.
Зависимости Hrisey in Gradle:
provided "pl.mg6.hrisey:hrisey:${hrisey.version}"
См. Здесь для поддерживаемых типов. ArrayList
среди них.
Установите плагин - Hrisey xor Lombok * - для своей IDE и начните использовать его удивительные возможности!
* Не включайте плагины Hrisey и Lombok одновременно, иначе вы получите ошибку при запуске IDE.
Parceler
Класс Parcelable с использованием Parceler :
@java.org.parceler.Parcel
public class POJOClass {
/* Fields, accessors, default constructor */
}
Чтобы использовать сгенерированный код, вы можете ссылаться на сгенерированный класс напрямую или через служебный класс Parcels
, используя
public static <T> Parcelable wrap(T input);
Чтобы разыменовать @Parcel
, просто вызовите следующий метод Parcels
class
public static <T> T unwrap(Parcelable input);
Зависимости Parceler в Gradle:
compile "org.parceler:parceler-api:${parceler.version}"
provided "org.parceler:parceler:${parceler.version}"
Просмотрите README для поддерживаемых типов атрибутов .
AutoParcel
AutoParcel - это расширение AutoValue , которое позволяет создавать значения Parcelable.
Просто добавьте implements Parcelable
к своим @AutoValue
аннотированным моделям:
@AutoValue
abstract class POJOClass implements Parcelable {
/* Note that the class is abstract */
/* Abstract fields, abstract accessors */
static POJOClass create(/*abstract fields*/) {
return new AutoValue_POJOClass(/*abstract fields*/);
}
}
AutoParcel в файле сборки Gradle:
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
repositories {
/*...*/
maven {url "https://clojars.org/repo/"}
}
dependencies {
apt "frankiesardo:auto-parcel:${autoparcel.version}"
}
PaperParcel
PaperParcel - процессор аннотаций, который автоматически генерирует типовой код Parcelable шаблонного кода для Kotlin и Java. PaperParcel поддерживает классы данных Kotlin, Google AutoValue через расширение AutoValue или только обычные объекты Java bean.
Пример использования из документов .
Аннотируйте ваш класс данных с помощью @PaperParcel
, реализуйте PaperParcelable
и добавьте статический экземпляр JVM PaperParcelable.Creator
, например ::
@PaperParcel
public final class Example extends PaperParcelable {
public static final PaperParcelable.Creator<Example> CREATOR = new PaperParcelable.Creator<>(Example.class);
private final int test;
public Example(int test) {
this.test = test;
}
public int getTest() {
return test;
}
}
Для пользователей Kotlin см. Использование Kotlin ; Для пользователей AutoValue см. Использование AutoValue .
ParcelableGenerator
ParcelableGenerator (README написан на китайском языке, и я не понимаю его. Приветствуются материалы от англо-китайских разработчиков, пишущих на этот ответ)
Пример использования от README .
import com.baoyz.pg.Parcelable;
@Parcelable
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Плагин android-apt помогает работать с процессорами аннотаций в сочетании с Android Studio.