Menu Docs
Página inicial do Docs
/ /
Tipos de dados

RealmAny - SDK Java

Novidade na versão 10.6.0.

Observação

Novas aplicações Java SDK não podem usar RealmAny

Os novos aplicativos App Services não poderão sincronizar modelos de dados com propriedades do tipo RealmAny.

Você pode usar o tipo de dados RealmAny para criar campos de objeto de Realm que podem conter qualquer um dos vários tipos subjacentes. Você pode armazenar múltiplas instâncias do RealmAny em RealmList, RealmDictionary ou RealmSet campos. Para alterar o valor de um campo RealmAny , atribua uma nova instância RealmAny com um valor subjacente diferente. Em esquemas de objeto de backend do Atlas App Services , o tipo de dados RealmAny é chamado de misto. RealmAny campos são indexáveis, mas não podem ser usados como chaves primárias.

Observação

Compatibilidade com RealmQualquer tipo

RealmAny os objetos podem referir-se a qualquer tipo de campo suportado, exceto:

  • RealmAny

  • RealmList

  • RealmSet

  • RealmDictionary

Para criar uma instância RealmAny , use o RealmAny.valueOf() para atribuir um valor inicial ou RealmAny.nullValue() para não atribuir nenhum valor. As instâncias RealmAny são imutáveis, assim como as instâncias String ou Integer ; se quiser atribuir um novo valor a um campo RealmAny , você deverá criar uma nova instância RealmAny .

Aviso

Dois valores possíveis de RealmAny nulos

RealmAny as instâncias são sempre anuláveis. Além disso, as instâncias podem conter um valor do tipo RealmAny.Type.NULL.

import com.mongodb.realm.examples.model.kotlin.Person;
import io.realm.RealmAny;
import io.realm.RealmObject;
public class Frog extends RealmObject {
String name;
RealmAny bestFriend;
// realm-required empty constructor
public Frog() {}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public RealmAny getBestFriend() { return bestFriend; }
public void setBestFriend(RealmAny bestFriend) { this.bestFriend = bestFriend; }
public String bestFriendToString() {
switch(bestFriend.getType()) {
case NULL: {
return "no best friend";
}
case STRING: {
return bestFriend.asString();
}
case OBJECT: {
if (bestFriend.getValueClass().equals(Person.class)) {
Person person = bestFriend.asRealmModel(Person.class);
return person.getName();
}
}
default: {
return "unknown type";
}
}
}
}
Frog frog = realm.createObject(Frog.class);
frog.setName("Jonathan Livingston Applesauce");
// set RealmAny field to a null value
frog.setBestFriend(RealmAny.nullValue());
Log.v("EXAMPLE", "Best friend: " + frog.bestFriendToString());
// possible types for RealmAny are defined in RealmAny.Type
Assert.assertTrue(frog.getBestFriend().getType() == RealmAny.Type.NULL);
// set RealmAny field to a string with RealmAny.valueOf a string value
frog.setBestFriend(RealmAny.valueOf("Greg"));
Log.v("EXAMPLE", "Best friend: " + frog.bestFriendToString());
// RealmAny instances change type as you reassign to different values
Assert.assertTrue(frog.getBestFriend().getType() == RealmAny.Type.STRING);
// set RealmAny field to a realm object, also with valueOf
Person person = new Person("Jason Funderburker");
frog.setBestFriend(RealmAny.valueOf(person));
Log.v("EXAMPLE", "Best friend: " + frog.bestFriendToString());
// You can also extract underlying Realm Objects from RealmAny with asRealmModel
Person bestFriendObject = frog.getBestFriend().asRealmModel(Person.class);
Log.v("EXAMPLE", "Best friend: " + bestFriendObject.getName());
// RealmAny fields referring to any Realm Object use the OBJECT type
Assert.assertTrue(frog.getBestFriend().getType() == RealmAny.Type.OBJECT);
// you can't put a RealmList in a RealmAny field directly,
// ...but you can set a RealmAny field to a RealmObject that contains a list
GroupOfPeople persons = new GroupOfPeople();
// GroupOfPeople contains a RealmList of people
persons.getPeople().add("Rand");
persons.getPeople().add("Perrin");
persons.getPeople().add("Mat");
frog.setBestFriend(RealmAny.valueOf(persons));
Log.v("EXAMPLE", "Best friend: " +
frog.getBestFriend().asRealmModel(GroupOfPeople.class).getPeople().toString());
import io.realm.RealmAny
import io.realm.RealmObject
open class Frog(var bestFriend: RealmAny? = RealmAny.nullValue()) : RealmObject() {
var name: String? = null
open fun bestFriendToString(): String {
if (bestFriend == null) {
return "null"
}
return when (bestFriend!!.type) {
RealmAny.Type.NULL -> {
"no best friend"
}
RealmAny.Type.STRING -> {
bestFriend!!.asString()
}
RealmAny.Type.OBJECT -> {
if (bestFriend!!.valueClass == Person::class.java) {
val person = bestFriend!!.asRealmModel(Person::class.java)
person.name
}
"unknown type"
}
else -> {
"unknown type"
}
}
}
}
val frog = realm.createObject(Frog::class.java)
frog.name = "George Washington"
// set RealmAny field to a null value
// set RealmAny field to a null value
frog.bestFriend = RealmAny.nullValue()
Log.v("EXAMPLE", "Best friend: " + frog.bestFriendToString())
// possible types for RealmAny are defined in RealmAny.Type
Assert.assertEquals(frog.bestFriend?.type, RealmAny.Type.NULL)
// set RealmAny field to a string with RealmAny.valueOf a string value
frog.bestFriend = RealmAny.valueOf("Greg")
Log.v("EXAMPLE", "Best friend: " + frog.bestFriendToString())
// RealmAny instances change type as you reassign to different values
Assert.assertEquals(frog.bestFriend?.type, RealmAny.Type.STRING)
// set RealmAny field to a realm object, also with valueOf
val person = Person("Jason Funderburker")
frog.bestFriend = RealmAny.valueOf(person)
Log.v("EXAMPLE", "Best friend: " + frog.bestFriendToString())
// You can also extract underlying Realm Objects from RealmAny with asRealmModel
val bestFriendObject = frog.bestFriend?.asRealmModel(Person::class.java)
Log.v("EXAMPLE", "Best friend: " + bestFriendObject?.name)
// RealmAny fields referring to any Realm Object use the OBJECT type
Assert.assertEquals(frog.bestFriend?.type, RealmAny.Type.OBJECT)
// you can't put a RealmList in a RealmAny field directly,
// ...but you can set a RealmAny field to a RealmObject that contains a list
val persons = GroupOfPeople()
// GroupOfPeople contains a RealmList of people
persons.people.add("Rand")
persons.people.add("Perrin")
persons.people.add("Mat")
frog.bestFriend = RealmAny.valueOf(persons)
Log.v("EXAMPLE", "Best friend: " +
frog.bestFriend?.asRealmModel(GroupOfPeople::class.java)
?.people.toString())

Você pode fazer uma query em um campo RealmAny como qualquer outro tipo de dados. Os operadores que só funcionam com determinados tipos, como operadores de cadeia de caracteres e operadores aritméticos, ignoram valores que não contêm esse tipo. A negação desses operadores corresponde a valores que não contêm o tipo. As query de tipo correspondem ao tipo subjacente, em vez de RealmAny. Os operadores aritméticos convertem valores numéricos implicitamente para comparar entre tipos.

Para assinar as alterações em um campo RealmAny , use o RealmObject.addChangeListener método do objeto de encerramento. Você pode utilizar o parâmetro ObjectChangeSet para determinar se o campo RealmAny foi alterado.

AtomicReference<Frog> frog = new AtomicReference<Frog>();
realm.executeTransaction(r -> {
frog.set(realm.createObject(Frog.class));
frog.get().setName("Jonathan Livingston Applesauce");
});
RealmObjectChangeListener<Frog> objectChangeListener =
new RealmObjectChangeListener<Frog>() {
@Override
public void onChange(@NotNull Frog frog, @Nullable ObjectChangeSet changeSet) {
if (changeSet != null) {
Log.v("EXAMPLE", "Changes to fields: " +
Arrays.toString(changeSet.getChangedFields()));
if (changeSet.isFieldChanged("best_friend")) {
Log.v("EXAMPLE", "RealmAny best friend field changed to : " +
frog.bestFriendToString());
}
}
}
};
frog.get().addChangeListener(objectChangeListener);
realm.executeTransaction(r -> {
// set RealmAny field to a null value
frog.get().setBestFriend(RealmAny.nullValue());
Log.v("EXAMPLE", "Best friend: " + frog.get().bestFriendToString());
// set RealmAny field to a string with RealmAny.valueOf a string value
frog.get().setBestFriend(RealmAny.valueOf("Greg"));
});
var frog: Frog? = null
realm.executeTransaction { r: Realm? ->
frog = realm.createObject(Frog::class.java)
frog?.name = "Jonathan Livingston Applesauce"
}
val objectChangeListener
= RealmObjectChangeListener<Frog> { frog, changeSet ->
if (changeSet != null) {
Log.v("EXAMPLE", "Changes to fields: " +
changeSet.changedFields)
if (changeSet.isFieldChanged("best_friend")) {
Log.v("EXAMPLE", "RealmAny best friend field changed to : " +
frog.bestFriendToString())
}
}
}
frog?.addChangeListener(objectChangeListener)
realm.executeTransaction { r: Realm? ->
// set RealmAny field to a null value
frog?.bestFriend = RealmAny.nullValue()
Log.v("EXAMPLE", "Best friend: " + frog?.bestFriendToString())
// set RealmAny field to a string with RealmAny.valueOf a string value
frog?.bestFriend = RealmAny.valueOf("Greg")
}

Voltar

Conjuntos

Nesta página