2016-02-17 2 views
1

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

Имея абстрактный класс с общими типами, как этот

public abstract class ParentClass<O> { 

    private String id; 
    private O options; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public O getOptions() { 
     return options; 
    } 

    public void setOptions(O options) { 
     this.options = options; 
    } 

} 

И еще один класс, который мы будем использовать в качестве опции (которые мы сериализации) ...

@Parcel(Parcel.Serialization.BEAN) 
public class MyOptions { 

    private boolean option1; 

    public boolean getOption1() { 
     return option1; 
    } 

    public void setOption1(boolean option1) { 
     this.option1 = option1; 
    } 
} 

И 3-го класса которые мы хотим сериализовать под названием ChildClass

@Parcel(Parcel.Serialization.BEAN) 
public class ChildClass extends ParentClass<MyOptions>{} 

Несмотря на то, что я не сериализую ParentClas s, но только ChildClass, я получаю ошибку компиляции, когда я пытаюсь построить проект

Parceler: Unable to find read/write generator for type java.lang.Object for ParentClass#options 
    public void setOptions(O options) { 

Я знаю, что в документации говорится, что «Посылка будет ошибкой, если общий параметр не отображается.», но в этом case Меня интересует только сериализация ChildClass, сохраняя атрибуты из ParentClass (то есть id и экземпляр класса MyOptions). Есть ли возможность сделать это возможным? Пытался следовать некоторым советам here, но не имел успеха.

ответ

1

Не самый лучший вариант, но вы можете обойти эту проблему, переопределив методы getOptions() и setOptions() в вашем базовом классе. Этот параметр определяет тип к Parceler:

@Parcel(Parcel.Serialization.BEAN) 
public class ChildClass extends ParentClass<MyOptions>{ 

    @Override 
    public MyOptions getOptions() { 
     return super.getOptions(); 
    } 

    @Override 
    public void setOptions(MyOptions options) { 
     super.setOptions(options); 
    } 
} 

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

+0

Спасибо за быстрый ответ :) Решил. –