Qual é a melhor maneira de usar a Lista <> no Realm Android?

Eu uso a alternativa RealmString para List <String> no Realm Android. Mas eu tenho um problema com RealmChangeListener. Eu uso o RealmString em muitos modelos como Cachorro, Gato, Frango no exemplo abaixo. Mas quando alguém nesse dado altera, todos eles também mudam.

Ex: Quando eu salvo Dog -> Dog Change e Cat Change também.

Eu posso corrigir esse problema usando RealmDogString, RealmCatString, RealmChickenString, mas ele duplica meu código. Alguém tem uma solução melhor?

Este é o meu código de exemplos:

public class RealmTestActivity extends AppCompatActivity {
    private Context context;
    private Realm realm;

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_realm_test);

        Stetho.initialize(
            Stetho.newInitializerBuilder(this)
                .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                .enableWebKitInspector(RealmInspectorModulesProvider.builder(this).build()).build());

        context = this;

        RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).build();
        Realm.setDefaultConfiguration(realmConfig);
        realm = Realm.getDefaultInstance();

        final RealmResults<Dog> puppies = realm.where(Dog.class).lessThan("age", 2).findAll();
        puppies.addChangeListener(new RealmChangeListener<RealmResults<Dog>>() {
          @Override
          public void onChange(RealmResults<Dog> results) {
            System.out.println("XXX Dog ::" + puppies.size());
            Toast.makeText(context, "Dog Change", Toast.LENGTH_SHORT).show();
            puppies.size();
          }});


        final RealmResults<Cat> puppiesCat = realm.where(Cat.class).lessThan("age", 2).findAll();
        puppiesCat.addChangeListener(new RealmChangeListener<RealmResults<Cat>>() {
          @Override
          public void onChange(RealmResults<Cat> results) {
            System.out.println("XXX Cat  ::" + puppiesCat.size());
            Toast.makeText(context, "Cat Change", Toast.LENGTH_SHORT).show();
          }
        });
    }

    public void saveDog(View view) {
        Dog dog = new Dog();
        dog.setName("Bella");
        dog.setAge(1);
        RealmList<RealmString> realmStrings = new RealmList<RealmString>();
        RealmString realmString = new RealmString();
        realmString.setValue("link_Bella.png");
        realmStrings.add(realmString);
        dog.setImage(realmStrings);

        realm.beginTransaction();
        realm.copyToRealm(dog);
        realm.commitTransaction();
    }

    public void saveCat(View view) {
        Cat cat = new Cat();
        cat.setName("Oliver");
        cat.setAge(1);
        RealmList<RealmString> realmStrings_2 = new RealmList<RealmString>();
        RealmString realmString_2 = new RealmString();
        realmString_2.setValue("link_Oliver.png");
        realmStrings_2.add(realmString_2);
        cat.setImage(realmStrings_2);
        realm.beginTransaction();
        realm.copyToRealm(cat);
        realm.commitTransaction();
    }
}

questionAnswers(1)

yourAnswerToTheQuestion