Instance fields can be accessed as functions, both for reading and writing. Suppose that we have a Java class that looks as follows:
public class Foo {
public String bar;
}We can access the bar field as follows:
let foo = Foo()
# Write
foo: bar("baz")
# Read, prints "baz"
println(foo: bar())An interesting behavior when writing fields is that the "methods" return the object, which means that you can chain invocations.
Suppose that we have a Java class as follows:
public class Foo {
public String bar;
public String baz;
}We can set all fields by chaining invocations as in:
let foo = Foo(): bar(1): baz(2)
It should be noted that Golo won’t bypass the regular Java visibility access rules on fields.
Back to the previous example, suppose that we have both a field and a method with the same name, as in:
public class Foo {
public String bar;
public String bar() {
return bar;
}
}Golo resolves methods first, fields last. Hence, the following Golo code will resolve the
bar() method, not the bar field:
let foo = Foo()
# Write the field
foo: bar("baz")
# Calls the bar() method
println(foo: bar())