Maven:
<dependency>
<groupId>org.realityforge.arez</groupId>
<artifactId>arez-annotations</artifactId>
<version>0.196</version>
</dependency>
Gradle:
groovy
implementation 'org.realityforge.arez:arez-annotations:0.196'
import arez.annotations.ArezComponent;
import arez.annotations.Observable;
@ArezComponent
public class ObservableObject {
private String name;
@Observable
public String getName() {
return name;
}
@Observable
public void setName(String name) {
this.name = name;
}
}
import arez.annotations.ArezComponent;
import arez.annotations.Observable;
import arez.annotations.Observe;
import arez.annotations.Observer;
@ArezComponent
public class ObserverObject {
private String name;
@Observable
public String getName() {
return name;
}
@Observable
public void setName(String name) {
this.name = name;
}
@Observe
public void observeName() {
System.out.println("Name changed: " + name);
}
}
import arez.ArezConfig;
import arez.ArezContext;
import arez.ArezContextProvider;
import arez.annotations.Action;
import arez.annotations.ArezComponent;
import arez.annotations.Observable;
public class ArezConfigExample {
private static final ArezContext c_invariantContext = new ArezContextProvider();
public static ArezContext getContext() {
return c_invariantContext;
}
@ArezComponent
public static class ExampleComponent {
private String name;
@Observable
public String getName() {
return name;
}
@Observable
public void setName(String name) {
this.name = name;
}
@Action
public void updateName(String newName) {
c_invariantContext.safeAction(() -> {
setName(newName);
});
}
}
public static void main(String[] args) {
ArezConfig config = ArezConfig.create();
config.setArezContextProvider(() -> ArezConfigExample.getContext());
ArezContext context = ArezContext.create(config);
ExampleComponent example = new ExampleComponent();
example.setName("John");
context.action("Update name", () -> {
example.updateName("Bob");
});
context.dispose();
}
}