Synchronized or confined
A new version of the closure proposal has been post at the end of this week by Neal Gafter and proposes in section 3 to tag parameter with a special keyword to differenciate between synchonous and asychronous closure.
For me this section contains two flaws, the first one is that the keyword used is synchronized, the second one is to not recognize that such feature can be usefull in other contexts than closure.
In the Java API, there are existing methods that take an object as argument
and don't allow to store this object in a field, by example,
startElement/endElement of SAX handler or
RowFilter.include().
I think a unique keyword can be used in all this cases.
Now, why not using synchronized for that ?
synchronized means thread, threading model, memory model,
etc. This keyword is so important that it can't be
reused to express something totally different without
complexified something that is already not obvious.
I think that using an annotation in this case is better.
You can name it as you want, there is already a reflexion
support. I propose @Confined because the reference
can't escape.
The following code shows the usage of @Confined with closure :
public static <T> void forEach(Iterable<? extends T> iterable,@Confined void(T) func) {
for(T item:iterable)
func(item);
}
...
List<Integer> list=Arrays.asList(2,4,6);
int result=0;
forEach(list,(int value){
result+=value;
});
System.out.println(result);
Rémi
With one breath, with one flow
You will know
Synchronicity
--- Synchronicity / Police
- Login or register to post comments
- Printer-friendly version
- forax's blog
- 564 reads





