Note: information on this page refers to Ceylon 1.1, not to the current release.

late annotation

The late annotation prevents the typechecker from performing definite specification checks on a reference.


class Child() {
    shared late Parent parent;
class Parent(children) {
    shared Child* children;
    for (child in children) {
        child.parent = this;


Using the late annotation on a reference prevents the typechecked from performing definite specification checks. Instead, code is generated which performs a runtime check and throws an exception if the reference:

  • is accessed when it hasn't been initialized, or
  • is reinitialized and not annotated variable.

This is intended to permit cyclic references between objects.

Only references may be annotated late (it doesn't make sense for getters.

See also